Sprawdzanie powtarzalnosci liczby, lekcja 21, zadanie 1
Ostatnio zmodyfikowano 2016-04-01 13:15
Midinetka Temat założony przez niniejszego użytkownika |
Sprawdzanie powtarzalnosci liczby, lekcja 21, zadanie 1 » 2016-03-31 17:39:38 Cześć! Odrabiając zadanie pierwsze z lekcji 21 natrafiłam na problem ze sprawdzaniem drugiej z wylosowanych liczb. Sprawdziłam, do którego momentu zmienne wyświetlają się poprawnie, a gdzie program niezamierzenie zapętla się. Wyszło mi, że w funkcji bool sprawdz(), pierwsza zmienna wczytuje się bez problemu, natomiast przy drugiej już jest problem. Program zapętla się, losując na okrągło liczby z podanego przedziały niezależnie od tego, czy spełniają warunki pętli, czy nie. Przyglądałam się tej funkcji i wydaje mi się, że powinna działać poprawnie... Od razu zastrzegam, że zależy mi na podpowiedzi, a nie poprawieniu za mnie kodu. Jeśli to nie pomoże, będę prosić o dokładniejsze instrukcje. Oto treść zadania: Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wczytaj() { int a; bool ok; do { cin >> a; ok = cin.good(); cin.clear(); cin.sync(); } while( ok == 0 ); return a; } int losuj() { return( rand() % 3 ) + 0; } bool sprawdz( int liczba, int tab[], int ile ) { if( ile <= 0 ) { return true; } int licznik = 0; do { if( tab[ licznik ] == liczba ); { return false; } licznik++; } while( licznik < ile ); return true; } void wyswietl( int tabp[], int tabd[], int iled, int ilep ) { int licznik = 0; do { cout << tabp[ licznik ] << ", "; licznik++; } while( licznik < ilep ); licznik = 0; do { cout << tabd[ licznik ] << ", "; licznik++; } while( licznik < iled ); licznik = 0; do { cout << tabp[ tabd[ licznik ] ] << ", "; licznik++; } while( licznik < iled ); } int main() { srand( time( NULL ) ); int pierwszat[ 3 ]; int drugat[ 2 ]; int elementyp = 0; int elementyd = 0; int pojemnoscp = 3; int pojemnoscd = 2; do { int ciny = wczytaj(); pierwszat[ elementyp ] = ciny; elementyp++; } while( elementyp < pojemnoscp ); do { int wylosowane = losuj(); if( sprawdz( wylosowane, drugat, elementyd ) == true ) { drugat[ elementyd ] = wylosowane; elementyd++; } } while( elementyd < pojemnoscd ); wyswietl( pierwszat, drugat, pojemnoscd, pojemnoscp ); return 0; }
|
|
Monika90 |
» 2016-03-31 20:04:32 Jeden błąd który widzę to nadmiarowy średnik po instrukcji if w funkcji sprawdz |
|
Midinetka Temat założony przez niniejszego użytkownika |
» 2016-04-01 13:15:03 I to było to! Dalej zapominam, że jeden średnik potrafi zrobić taką różnicę :) Dzięki! |
|
« 1 » |