Mnożenie tablic
Ostatnio zmodyfikowano 2020-01-22 16:37
Seba_S Temat założony przez niniejszego użytkownika |
Mnożenie tablic » 2020-01-22 07:29:28 Cześć, mam problem z jednym z wymyślonych zadań. nie rozpisując się wklejam cały kod. Nie działa mi funkcja w której podane liczby przez użytkownik zapisują się do tablicy a następnie program mnoży je przez siebie. sprawdziłem program i przy np dodawaniu działa wszystko ok a przy mnożeniu juz nie. nie rozumiem gdzie robie blad i skąd on wynika ... #include <iostream> int ASCII() { std::cout << "[KOD ASCII]" << std::endl; for( int i = 65; i < 91; i++ ) { std::cout << i << "." <<( char ) i << std::endl; } return 0; } int mnozenie( int tablica[], int ile ) { int iloczyn = 0; for( int i = 0; i < ile; i++ ) { std::cout << "Podaj " << i + 1 << " liczbe: "; std::cin >> tablica[ i ]; iloczyn += tablica[ i ]; } std::cout << "iloczyn podanych liczb wynosi: " << iloczyn << std::endl; return 0; } int main() { int wybor; std::cout << "zaliczenie C++" << std::endl; std::cout << "[wybierz opcje]" << std::endl; std::cout << "[1] wypisz kod ASCII - numer/litera" << std::endl; std::cout << "[2] mnozenie dowolnej ilosci liczb podanej przez uzytkownika" << std::endl; std::cout << "twoj wybor - "; std::cin >> wybor; switch( wybor ) { case 1: ASCII(); break; case 2: int ile = 0; int i = 0; std::cout << "ile liczba przemnozyc: "; std::cin >> ile; int dane[ i ]; mnozenie( dane, ile ); break; } }
|
|
nanoant20 |
» 2020-01-22 09:09:24 nie rozumiem gdzie robie blad i skąd on wynika ... |
int iloczyn = 0; jak mnożysz przez ZERO to dostajesz wynik 0-wy ten zapis też jest niepoprawny (błędny), jeżeli by było np. i = 10 to o.k. Obecnie jest to tablica zero [0]-elementowa Kompilator podczas kompilacji powinien znać rozmiar tablicy w przeciwnym wypadku trzeba posłużyć się tablicą dynamiczną |
|
Seba_S Temat założony przez niniejszego użytkownika |
» 2020-01-22 14:20:46 ok - "widziałem" ze popełniam gdzieś jakiś głupi blad... a co drugie błędu to może być tak: ... case 2: int ile = 0; std::cout << "ile liczba przemnozyc: "; std::cin >> ile; int i = ile; int dane[ i ]; mnozenie( dane, ile ); break;
użytkownik przez wpisanie ilość liczb do przemnożenia będzie tworzył odpowiednia ilość tablic program działa tylko czy to jest poprawnie zrobione ? |
|
pekfos |
» 2020-01-22 16:24:20 program działa tylko czy to jest poprawnie zrobione ? |
Zależy co znaczy 'poprawnie'. Na pewno nie przenośnie - tablice o rozmiarze określonym przez zmienną nie są poprawne w C++, ale są wspierane przez większość kompilatorów jako niestandardowe rozszerzenie. Lepiej robić std::vector < int > dane( i );
Więcej w Kontener std::vector<>. |
|
nanoant20 |
» 2020-01-22 16:28:34 program działa tylko czy to jest poprawnie zrobione ? |
Nie. Możesz zadeklarować tablice np. int dane[10]; i pętlą pobierać od user'a tyle danych ile zadeklarował, że chce podać, ale nie więcej niż ma rozmiar tablica W przeciwnym wypadku trzeba skorzystać z tablicy dynamicznej cin >> ile; int * tab = new int[ ile ];
delete[] tab; tab = NULL;
dodam tylko Zarządzanie pamięcią new, deleteużytkownik przez wpisanie ilość liczb do przemnożenia będzie tworzył odpowiednia ilość tablic |
Nie. Jeżeli to będzie tablica statyczna to wprowadzi do niej określoną liczbę elementów. Jeżeli będzie to tablica dynamiczna, to określi tylko jej rozmiar. |
|
pekfos |
» 2020-01-22 16:37:05 W przeciwnym wypadku trzeba skorzystać z tablicy dynamicznej
int * tab = new int[ ile ];
|
To jest scenariusz użycia vectora, nie new. Wektor sam po sobie zwolni pamięć, sam się rozszerzy w miarę potrzeby i nie jest wskaźnikiem, z którym można zrobić coś idiotycznego. C++ jest uznawane za "mniej bezpieczny język" właśnie przez programistów "C z iostream", którzy sami chcą zarządzać pamięcią, nie mając ku temu realnego powodu. |
|
« 1 » |