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

rozdzial/lekcja 19, zadanie domowe

Ostatnio zmodyfikowano 2022-04-08 06:41
Autor Wiadomość
jebackoze
Temat założony przez niniejszego użytkownika
rozdzial/lekcja 19, zadanie domowe
» 2022-04-07 14:31:18
chcialbym prosic o ocene kodu, czy wszystko gra i buczy:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

void wylosujLiczby( int t[ ], int rozmiar, int start, int stop )
{
   
srand( time( NULL ) );
   
int i = 0;
   
do
   
{
       
t[ i ] =( std::rand() % stop - start + 1 ) + start;
       
++i;
   
} while( i < rozmiar );
   
}

void wypiszLiczby( int t[ ], int rozmiar )
{
   
int i = 0;
   
do {
       
std::cout << t[ i ] << ", ";
       
++i;
   
} while( i < rozmiar );
   
}

int obliczSume( int t[ ], int rozmiar )
{
   
int i = 0, suma = 0;
   
do {
       
suma += t[ i ];
       
++i;
   
} while( i < rozmiar );
   
   
return suma;
}

int main()
{
   
int tablica[ 999 ];
   
wylosujLiczby( tablica, 999, 4, 10 );
   
wypiszLiczby( tablica, 999 );
   
int iSuma = obliczSume( tablica, 999 );
   
std::cout << "Suma liczb wynosi: " << iSuma << std::endl;
   
return 0;
}

w ramach cwiczen, przed zadaniem domowym zaczalem pisac taki kod i chcialbym prosic rowniez o ocene prawidlowosci, porownujac go do powyzszego kodu, abstrahujac od zalozen int main z zadania domowego. chodzi o efekt koncowy. kod tez wyszedl mi krotszy.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

void tablica( int t[ ], int rozmiarowka )
{
   
srand( time( NULL ) );
   
int licznik = 0;
   
do
   
{
       
t[ licznik ] =( std::rand() % 7 ) + 4;
       
++licznik;
   
} while( licznik < rozmiarowka );
   
}

int main()
{
   
int licznik = 0, suma = 0, rozmiar;
   
std::cin >> rozmiar;
   
int liczba[ rozmiar ];
   
tablica( liczba, rozmiar );
   
do {
       
std::cout << liczba[ licznik ] << ", ";
       
suma += liczba[ licznik ];
       
++licznik;
   
} while( licznik < rozmiar );
   
   
std::cout << "\nsuma: " << suma;
   
return 0;
}
P-179379
pekfos
» 2022-04-07 22:26:45
C/C++
( std::rand() % stop - start + 1 ) + start;
Kolejność obliczeń jest zła.

C/C++
std::cin >> rozmiar;
int liczba[ rozmiar ];
Tablice zmiennego rozmiaru nie są elementem standardu C++. Nie masz też żadnej walidacji rozmiaru pobranego od użytkownika. Wartość ujemna lub zbyt duża spowoduje crash programu, gdzie nie da się w uniwersalny sposób stwierdzić ile to "zbyt dużo". Wszystkie zmienne lokalne, w tym takie tablice, korzystają z puli pamięci która ma typowo parę megabajtów. W lekcji o tablicach jest czerwona ramka o tym by tak nie robić, chociaż nie wchodzi w szczegóły co do powodów.
P-179380
jebackoze
Temat założony przez niniejszego użytkownika
» 2022-04-08 06:41:02
( std::rand() %( stop - start + 1 ) ) + start;

juz poprawilem, chyba z rozpedu nie ujalem tego w nawias.

co do zmiennej:
C/C++
std::cin >> rozmiar;
int liczba[ rozmiar ];
to ja wprowadzilem na potrzeby testowania zeby zobaczyc czy kod dziala i czy suma wychodzi prawidlowo. latwiej mi bylo raz wprowadzic liczbe i szybko zweryfikowac sume niz za kazdym razem w kodzie zmieniac te wartosc w kilku miejscach. moglem w sumie dac komentarz przy tej zmiennej w kodzie z wyjasnieniem.
przy 999 liczbach byloby mi ciezej zweryfikowac poprawnosc wynikow (;

P-179384
« 1 »
  Strona 1 z 1