Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Mnożenie tablic

Ostatnio zmodyfikowano 2020-01-22 16:37
Autor Wiadomość
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 ...

C/C++
#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 ];
        // 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;
    }
}
 
P-176099
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

C/C++
int i = 0;
int dane[ i ];
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ą
P-176100
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:

C/C++
...
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 ?
P-176102
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ć
C/C++
std::vector < int > dane( i );
Więcej w » Kurs C++ » Poziom 5Kontener std::vector<> lekcja.
P-176105
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
C/C++
cin >> ile;
int * tab = new int[ ile ]; //alokacja pamieci na tablice

//kod programu

//zwalniamy pamiec, niszczymy tablice
delete[] tab; //uwolnienie pamieci
tab = NULL;

dodam tylko
Zarządzanie pamięcią new, delete

uż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.
 
P-176106
pekfos
» 2020-01-22 16:37:05
W przeciwnym wypadku trzeba skorzystać z tablicy dynamicznej
C/C++
int * tab = new int[ ile ]; //alokacja pamieci na tablice
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.
P-176107
« 1 »
  Strona 1 z 1