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

Rozdział 19 - Zadanie domowe

Ostatnio zmodyfikowano 2016-03-31 14:32
Autor Wiadomość
piotrekw
Temat założony przez niniejszego użytkownika
Rozdział 19 - Zadanie domowe
» 2016-03-31 14:03:59
Witam

Mój kod do tego zadania wygląda tak:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int wylosuj( int t[], int rozmiar, int start, int stop )
{
   
    int licznik = 0;
    int wynik;
   
    do {
        t[ licznik ] =(( std::rand() %( stop -( start - 1 ) ) + start ) );
        licznik++;
    } while( licznik < rozmiar );
   
    wynik = t[ rozmiar ];
   
    return wynik;
}

int wypisz( int t[], int rozmiar )
{
    int licznik = 0;
   
    do {
        std::cout << t[ licznik ] << std::endl;
        licznik++;
    } while( licznik < rozmiar );
   
    return 0;
}

int obliczSume( int t[], int rozmiar )
{
   
    int licznik = 0;
    int suma = 0;
    do {
        suma += t[ licznik ];
        ++licznik;
    } while( licznik < rozmiar );
   
    return suma;
}
int main()
{
    int tablica[ 999 ];
   
    srand( time( NULL ) );
    wylosuj( tablica, 999, 4, 10 );
    wypisz( tablica, 999 );
    int suma = obliczSume( tablica, 4 );
    std::cout << "Suma rekordow wynosi: " << suma << std::endl;
    return 0;
}
Wszystko działa ok do czasu aż argument funkcji obliczSume jest większy od 4. Jeśli dam np. 3 lub 2 to już nie sumuje mi dwóch pierwszych rekordów tylko wypisuje dziwny wynik. Czy gdzieś w kodzie popełniłem błąd ?
P-146816
mateczek
» 2016-03-31 14:24:17
u mnie działa.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int wylosuj( int t[], int rozmiar, int start, int stop )
{
   
    int licznik = 0;
    int wynik;
   
    do {
        t[ licznik ] =(( std::rand() %( stop -( start - 1 ) ) + start ) );
        licznik++;
    } while( licznik < rozmiar );
   
    wynik = t[ rozmiar - 1 ]; //i tak nie korzystasz ale ostatni element to rozmiar -1 dalej wali poza zakres
   
    return wynik;
}

int wypisz( int t[], int rozmiar )
{
    int licznik = 0;
   
    do {
        std::cout << t[ licznik ] << " ";
        licznik++;
        if(( licznik % 30 ) == 0 ) cout << endl;
       
    } while( licznik < rozmiar );
   
    return 0;
}

int obliczSume( int t[], int rozmiar )
{
   
    int licznik = 0;
    int suma = 0;
    do {
        suma += t[ licznik ];
        ++licznik;
    } while( licznik < rozmiar );
   
    return suma;
}
int main()
{
    int tablica[ 999 ];
   
    srand( time( NULL ) );
    wylosuj( tablica, 999, 4, 10 );
    wypisz( tablica, 999 );
    int suma = obliczSume( tablica, 2 );
    std::cout << "Suma rekordow wynosi: " << suma << std::endl;
    return 0;
}
P-146818
piotrekw
Temat założony przez niniejszego użytkownika
» 2016-03-31 14:32:11
Poprawiłem tę linijkę w funkcji wylosuj na: wynik = t[rozmiar - 1]; - wciąż nie sumuje mi podanych wyników. Przykładowo: Jeśli argument 'rozmiar' funkcji obliczSume jest 2 to dostaje wynik sumy: 14 mimo, że dwa pierwsze rekordy to 7 i 5.

EDIT: Hmmm dziwne.. bo skopiowałem Twój kod i działa, więc dlaczego mój nie ?

EDIT2: Moja funkcja wypisz wszystko psuje bo skopiowałem swoją do Twojego kodu to znów przestało działać, więc wie ktoś na czym polega problem w funkcji wypisz ?

EDIT3: Do mojego kodu wstawiłem dwie linijki
C/C++
std::cout << tablica[ 0 ] << std::endl;
std::cout << tablica[ 1 ] << std::endl;

I wyskakuje suma rekordów: 8
tablica[0] ma wartość 4 i tablica[1] ma wartość 4, więc sumuje dobrze. Natomiast dwa pierwsze wyniki w wylosowanych liczbach które mi wypisało na początku to: 6 i 9. O co chodzi ?

Dodałem w funkcji wypisz linijkę: std::cout << licznik; i program pokazuje mi wyniki od 853 do 998. Dlaczego ?

OK wychodzi na to, że konsola ogranicza wyświetlanie wyników.

EDIT4: Problem rozwiązany, wystarczyło usunąć w funkcji wypisz std::endl ze względu na ograniczenie wyświetlania w konsoli.
P-146820
« 1 »
  Strona 1 z 1