matematykaszkolna.pl
Programowanie c++ Olunia: Programowanie c++ . Napisac za pomocą tablicy program obliczający średnią arytmetyczną liczb #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { double suma = 0, liczba; unsigned int n; cout<<"Z jakiej ilości liczb chcesz liczyć średnią arytmetyczną: "; cin>>n; cout<<endl; if(n>0) { for(int i = 1;i<= n;i++) { cout<<"Podaj "<<i<<" liczbę: "; cin>>liczba; suma+=liczba; } cout<<"Średnia "<<n<<" liczb wynosi: "<<suma/n<<endl; } else cout<<"Podałeś nieprawidłową wartość zmiennej n"<<endl; system("pause"); return 0; } Mam coś takiego ale czy to jest poprawnie napisane z wykorzystaniem tablic w c++
31 maj 15:18
po prostu Michał: 1)nigdy nie czaje czemu w int main() masz jakies argumenty... 2)przeciez nie uzylas wgl tablic... to jak ma byc poprawnie z uzyciem tablic, skoro wgl nie zostaly zuzyte.
31 maj 15:46
po prostu Michał: 3) spisywanie algorytmu prosto z neta nie sprawi, ze go nagle zrozumiesz emotka
31 maj 15:47
po prostu Michał: #include <iostream> using namespace std; int main() { double suma = 0; (wystarczy "int suma", bo chyba nie przekroczysz liczby miliard?) unsigned int n; (moze byc po prostu "int n") cout<<"Z jakiej ilości liczb chcesz liczyć średnią arytmetyczną: "; cin>>n; int *tablica = new int [n]; if(n>0) { for(int i = 0;i< n;i++) { cout<<"Podaj "<<i<<" liczbę: "; cin>>tablica[i]; suma+=tab[i]; } cout<<"Średnia "<<n<<" liczb wynosi: "<<suma/n<<endl; } else cout<<"Podałeś nieprawidłową wartość zmiennej n"<<endl; delete [] tablica; system("pause"); return 0; }
31 maj 15:53
po prostu Michał: Małe poprawki... #include <iostream> #include <cstdlib> using namespace std; int main() { double suma = 0; //(wystarczy "int suma", bo chyba nie przekroczysz liczby miliard?) unsigned int n; //(moze byc po prostu "int n") cout<<"Z jakiej ilosci liczb chcesz liczyc srednia arytmetyczna: "; cin>>n; int *tablica = new int [n]; if(n>0) { for(int i = 0;i< n;i++) { cout<<"Podaj "<<i+1<<" liczbe: "; cin>>tablica[i]; suma+=tablica[i]; } cout<<"Srednia "<<n<<" liczb wynosi: "<<suma/n<<endl; } else cout<<"Podales nieprawidlowa wartosc zmiennej n"<<endl; delete [] tablica; system("pause"); return 0; }
31 maj 15:57
po prostu Michał: Polecam sprawdzic, czy po usunieciu #include <cstdlib> oraz system("pause") algorytm nadal bedzie dzialac, w sensie na pewno bedzie, ale to sie uzywa tylko po to, zeby sie okienko po zakonczeniu dzialania programu nie zamykalo, jednakze w nowszych kompilatorach sie nie powinno zamykac, dlatego sprawdz, czy bez tych dwoch bedzie dzialac.
31 maj 15:59
Olunia: Dzięki . Ja poprostu nie rozumiem tych wszystkich komend jak np. co znaczy int*tab tab[] lub tab[i]
31 maj 15:59
Olunia: Nie ma nigdzie informacji na ten temat , a ucząc się samemu to ciężko
31 maj 16:01
po prostu Michał: int *tab = new int[n] <−−deklarujemy tablice dynamiczną (rozmiar podamy dopiero po wczytaniu liczby "n" czyli po komendzie cin>>n, dlatego w kodzie to wystepuje wlasnie po wczytywaniu tego "n") dynamiczna rozni sie tym, ze statyczna musi od razu miec jakas liczbe np. int tab[10] oznacza tablice ktora ma 10 elementow, dlatego dynamiczne lepsze, jednak uzywaja wskaznikow −> to ta gwiazdka przy "tab" Oczywiscie najwazniejsza rzecz dotyczaca tablic −> indeksowane sa od zera a to oznacza, ze jak deklarujemy tablice 3 − elementowa (statycznie czy dynamiczne − bez roznicy, wezmy przyklad statyczny, to): int tab[3]; <−−deklarujemy tablice 3 elementowa to ona ma elemnty 0, 1, 2(w sensie tablica to takie pudeleczko z przegrodkami, ktorych adres (indeks) to 0 ,1 ,2 dla tej akurat tablicy). puszczamy petle for dlatego zeby wypelniac w tym pudeleczku kazda przegrodke. np. wezmy taki program : int tab[3]; for(int i=0; i<3;i++) { cin>>tab[i]; } ten program wczytuje 3 liczby do tablicy (w rozne miejsca w tablicy) bo najpierw mamy i=0, czyli tab[0] i tam zapisujemy jakas wartosc, nastepnie po przejsciu wszystkich komend w petli (tutaj jest tylko ta jedna) zmienna "i" sie zwieksza o jeden (bo i++ oznacza i = i+1) zatem teraz i=1, i wczytujemy do tab[1] jakas wartosc i na koniec i=2 , tab[2] = ... i teraz " i " nam sie zwiekszy, ale warunek petli nie bedzie spelniony bo i < 3, a teraz "i" wynosi 3, zatem 3 nie jest mneijsze od 3, dlatego petla sie zakonczy.
31 maj 16:06
po prostu Michał: jak to nie ma nigdzie informacji... https://www.youtube.com/watch?v=Rt1HnMdzINo&list=PLOYHgt8dIdoxx0Y5wzs7CFpmBzb40PaDo&index=6 jesli znajdziesz czas, to obejrzyj od pierwszego filmiku.
31 maj 16:07
Dziadek Mróz: main to funkcja główna przyjmująca 2 argumenty (argc − ilość argumentów, argv − tablica argumentów, gdzie argv[0] to nazwa programu) Nie stosujemy globalnie using namespace std, może to prowadzić do błędnego linkowania podczas kompilacji. Przykład: biblioteka STL <list> z klasą std::list, w programie tworzymy własną klasę STL o nazwie list: −−−−−−−−−−−−−−−− template <class T> class list { ... }; −−−−−−−−−−−−−−−− Przez omyłkę zrobiliśmy takie coś: −−−−−−−−−−−−−−−− #include <list> ... using namespace std; template <class T> class list { ... }; int main(int argc, char **argv) { list<int> *list1 = new list<int>(); std::list<int> *list2 = new std::list<int>(); } −−−−−−−−−−−−−−−− list1 jest obiektem której klasy, std::list z <list> czy naszej klasy list?
31 maj 16:41
Dziadek Mróz: Olunia jest na poziomie 0, więc wskaźniki jej nie dotyczą. −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− #include <iostream> int main(int argc, char **argv) { int ile_liczb; std::cout << "Podaj ile liczb chcesz wprowadzic: "; std::cin >> ile_liczb; int tablicaliczb[ile_liczb]; int srednia = 0; for (size_t indeks = 0; indeks < ile_liczb; indeks++) { srednia = srednia + tablica_liczb[indeks]; } srednia = srednia/ile_liczb; std::cout << "Srednia arytmetyczna podanych liczb wynosi: " << srednia << std::endl; return 0; } −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− https://pastebin.com/g2PwJBbV
31 maj 16:48
Dziadek Mróz: aj sorki, nie podaliśmy liczb −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− for (size_t indeks = 0; indeks < ile_liczb; indeks++) { std::cout << "Podaj element " << indeks << ": "; std::cin >> tablica_liczb[indeks]; srednia = srednia + tablica_liczb[indeks]; } −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− https://pastebin.com/ratyJcTY
31 maj 16:52
po prostu Michał: "Olunia jest na poziomie 0, więc wskaźniki jej nie dotyczą." Mowisz zeby nie stosowac globalnie using namespace std, a kontrprzyklad podajesz jej jakies biblioteki z kosmosu...to bez sensu. Skoro na wskaznikach sie nie zna to tym bardziej using ... nie zaszkodzi Ja przez cale liceum mialem stosowane globalnie using namespace std; i jakos nic sie nie wydarzylo.
31 maj 16:57
Dziadek Mróz: O using namespace std pisałem do Ciebie Michał emotka Ok, stosowałeś w liceum, a tak poza nim pisałeś komuś program na zlecenie, albo robiłeś korektę czyjegoś kodu na zamówienie? Pewnie nie, jak ugryziesz trochę praktyki to w końcu wpadniesz na ten problem i będziesz się dziwił, czemu "u mnie nie działa" emotka
31 maj 17:03
Olunia: To mi pomóżcie z jeszcze jednym ... Program prosi użytkownika o podanie liczby losowań −n
31 maj 17:51
Olunia: #include<iostream> #include<ctime> using namespace std; int rozm ; void wypisz (int tablica[]) { for(int i=0;i<rozm;i++) cout<<tablica[i]<<endl; } int main () { cout <<"Podaj liczby losowan n:"<<endl; cin>>rozm; int*tablica= new int [rozm]; return 0; }
31 maj 17:52
Olunia: próbuje sama ale wychodzi jak widac ..
31 maj 17:52
Dziadek Mróz: −−−−−−−−−−−−−−−−−−−−−−−−−−− #include <iostream> #include <cstdlib> #include <ctime> void losuj(int *tablica, int ile_losowan) { srand(time(NULL)); for (size_t indeks, indeks < ile_losowan; indeks++) { tablica[indeks] = rand() % 100; } } void wypisz(int *tablica, int ile_liczb) { for (sizet indeks, indeks < ile_liczb; indeks++) { std::cout << " " << tablica[indeks]; } } int main(int argc, char **argv) { int ile_losowan; std::cout << "Podaj ile losowan chcesz przeprowadzic: "; std::cin >> ile_losowan; int *tablica = new int[ile_losowan]; losuj(tablica, ile_losowan); wypisz(tablica, ile_losowan); return 0; } −−−−−−−−−−−−−−−−−−−−−−−−−−− https://pastebin.com/Y1fyF2KK
31 maj 18:08
po prostu Michał: Tak wlasciwie mam pytanie, dotychczas bylem pewien ze tablice dynamiczna mozna zrobic tylko i wylacznie na wskaznikach, jednakze napisalem sobie prosty program int main() { int n; cout<<"Podaj rozmiar tablicy: "; cin>>n; int tab[n]; for(int i=0;i<n;i++) cout<<tab[i]<<" "; } i wychodzi na to ze tez dziala, wiec wlasciwie czemu tak sie nie implementuje tablicy dynamicznej. ?
31 maj 19:59
31 maj 20:30