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

Sprawdzanie powtarzalnosci liczby, lekcja 21, zadanie 1

Ostatnio zmodyfikowano 2016-04-01 13:15
Autor Wiadomość
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.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int wczytaj() //wczytaj trzy liczby, spr poprawnosc, (spr powtarzalnosc?), wpisz liczby do pierwszej tablicy.
{
    int a;
    bool ok;
    do
    {
        cin >> a;
        ok = cin.good();
        cin.clear();
        cin.sync();
       
    } while( ok == 0 );
   
    return a;
}
int losuj() // wylosuj 2 liczby z przedzialu od 0 do 2 wlacznie i zwroc do sprawdzenia.
{
    return( rand() % 3 ) + 0;
   
}
bool sprawdz( int liczba, int tab[], int ile ) // sprawdz, czy wczytane liczby sie nie powtarzaja. Jesli nie, to przekaz je dalej.
{
    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 ) //wypisz tablice pierwsza z tablica druga zamiast liczby elementow.
{
   
    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 );
   
    //wsadzic w petle, dodac instr. if(spr = true) to dopisz do tab i dopisuj a¿ dojdzie do max pojemnosci tab drugiej
    do
    {
        int wylosowane = losuj(); //blad wystepuje przy drugim sprawdzaniu wylosowanej liczby. blad bedzie w funkcji sprawdz w czesci porównującej poprzednie losowane liczby(?).
       
        if( sprawdz( wylosowane, drugat, elementyd ) == true )
        {
            drugat[ elementyd ] = wylosowane;
            elementyd++;
        }
    } while( elementyd < pojemnoscd );
   
    wyswietl( pierwszat, drugat, pojemnoscd, pojemnoscp );
   
    return 0;
}
P-146832
Monika90
» 2016-03-31 20:04:32
Jeden błąd który widzę to nadmiarowy średnik po instrukcji if w funkcji sprawdz
P-146840
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!
P-146857
« 1 »
  Strona 1 z 1