Problem z wyświetleniem wartości z funkcji

0
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;



int wczytanie_liczb (int tab[], int ilosc,int od,int doo)
{
    int nr_liczby=0;
    cout << "Podaj liczby do losowania: " <<endl;
    do
    {
        int iLiczba;
        cin >> iLiczba;
        if (iLiczba<=doo && iLiczba>=od)
        {
            tab[nr_liczby]=iLiczba;
            nr_liczby++;

        }
        else
        {
            cout << "Podales inna liczbe niz z powyzszego zakresu"<<endl;
        }



    }while (nr_liczby<ilosc);

    return 0;
}





bool sprawdzenie(int tab[],int losowana, int ilosc)
{
    int i=0;
    do
    {
        if(tab[i]==losowana)
        {
            return true;
        }
        i++;
    }while(i<ilosc);

    return false;
}






int losowanie (int od, int doo)
{
    return (rand()%(doo+1-od))+od;
}



int main()
{
    srand(time(NULL));
    // Pobieranie przedziału //
    int od;
    int doo;
    int ilosc=3;
    int do_wylosowania=2;

    cout << "Podaj z jakiego przedziału beda pochodzily liczby do losowania: "<<endl;
    cout << "Od: ";
    cin >> od;
    cout << "Do: ";
    cin >> doo;


    int tablica[ilosc];
    int wylosowane[do_wylosowania];


    // Wczttywabue liczby //
    wczytanie_liczb(tablica,ilosc,od,doo);

    int i=0;
    do
    {

        int los;
        bool spraw;
        //Losowanie liczby i jej sprawdzenie//
        los = losowanie(od, doo);

        spraw=sprawdzenie(tablica, los, ilosc);
        int a = 0;
        if(spraw==true)
        {
            wylosowane[a] = los;
            a++;
        }

        i++;

    }while(i<do_wylosowania);


    cout << "Wylosowane liczby to:";

    int b=0;
    do
    {
        cout << wylosowane[b];
        b++;
    }while(b<do_wylosowania);
}
 

OPIS:
Program pobiera przedział z jakiego będą podawane liczby następnie prosi o podanie trzech liczb a na sam koniec losuje dwie z nich bez powtórzeń.

Niestety nie potrafię wyświetlić tych liczb. Proszę o pomoc.

0
int wczytanie_liczb (int tab[], int ilosc,int od,int doo)
{
    int nr_liczby=0;
//...
}

Zrobiłbym to z wartością domniemaną, w SPACJA końcu i tak definiujesz to zaraz na początku

int wczytanie_liczb (int tab[], int ilosc,int od,int doo, int nr_liczby = 0)
{
//...
}
    int ilosc=3; //powinno być const int ilosc = 3;
    int do_wylosowania=2; // powinno być const int do_wylosowania = 2;
//... 
    int tablica[ilosc];
    int wylosowane[do_wylosowania];

przy definicji tablicy w ten sposób MUSISZ podać wartość która jest niezmienna

0

Zrobiłem coś takiego, ale program czasami losuje dwie jednakowe liczby ( dwie z trzech podanych)

 
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;



int wczytanie_liczb (int tab[], int ilosc,int od,int doo)
{
    int nr_liczby=0;
    cout << "Podaj liczby do losowania: " <<endl;
    do
    {
        int iLiczba;
        cin >> iLiczba;
        if (iLiczba<=doo && iLiczba>=od)
        {
            tab[nr_liczby]=iLiczba;
            nr_liczby++;

        }
        else
        {
            cout << "Podales inna liczbe niz z powyzszego zakresu"<<endl;
        }



    }while (nr_liczby<ilosc);

    return 0;
}





bool sprawdzenie(int tab[],int losowana, int ilosc)
{
    int i=0;
    do
    {
        if(tab[i]==losowana)
        {
            return true;
        }
        i++;
    }while(i<ilosc);

    return false;
}






int losowanie (int od, int doo)
{
    return (rand()%(doo+1-od))+od;
}



int main()
{
    srand(time(NULL));
    // Pobieranie przedzia³u //
    int od;
    int doo;
    int ilosc=3;
    int do_wylosowania=2;

    cout << "Podaj z jakiego przedzia³u beda pochodzily liczby do losowania: "<<endl;
    cout << "Od: ";
    cin >> od;
    cout << "Do: ";
    cin >> doo;


    int tablica[ilosc];
    int wylosowane[do_wylosowania];


    // Wczttywabue liczby //
    wczytanie_liczb(tablica,ilosc,od,doo);

//-----------------------------------------------tutaj byl problem
    int los;
    bool spraw;

    sprawdzenie(tablica,los,ilosc);


    int a = 0;
    do
    {
        los = losowanie(od, doo);
        spraw=sprawdzenie(tablica, los, ilosc);
        if(spraw==true)
        {
            wylosowane[a] = los;
            a++;
        }
    }while(a<do_wylosowania);


//-----------------------------------------------------------------------

    cout << "Wylosowane liczby to:";

    int b=0;
    do
    {
        cout << wylosowane[b]<<endl;
        b++;
    }while(b<do_wylosowania);
}

Nie bardzo wiem "co" tym zrobiłem ale poprawiłem te dwie linijki:

 
    const int ilosc=3;
    const int do_wylosowania=2;

Dodam jeszcze że uczę się kilka dni i pisałem to z głowy wiec weźcie pod uwagę każdą możliwość hehe ; )

0

Napisałem Ci na szybko program, choć dla mnie tutaj funkcja jest w ogóle nie potrzebna, ale widzę, że chcesz przesyłanie do funkcji, to umieściłem w kodzie

#include <iostream>
#include <ctime>
using namespace std;

int wybieranie(int pocz, int konc, int wybor = 0)
{
	while(true)
	{
		cout << "\nPodaj liczbe: ";
		cin >> wybor;
		if((wybor < pocz) || (wybor > konc))
			cout << "Podales liczbe ze zlego zakresu..";
		else
			return wybor;
	}
}

int main()
{
	srand(static_cast<int>(time(0)));
	cout << "Podaj przedzial od: ";
	int pocz;
	cin >> pocz;

	cout << "DO: ";
	int konc;
	cin >> konc;

	const int n = 3;
	int tab[n];
	for(int i = 0; i < n; i++)
		tab[i] = wybieranie(pocz, konc);

	cout << "Wylosowane 2 sposrod " << n << " liczb ktore podales to: ";
	
	for(int i = 0; i < 2; i++)
		cout << tab[rand() % n] << endl;

	system("PAUSE");
	return 0;
}

Wydaje mi się, że robi to co chcesz.

Przy definicji tablicy w ten sposób musi być ustalony rozmiar tablicy który będzie niezmienny w chwili kompilacji, musisz kompilatorowi dać znać, że tej wartości nikt nie zmieni choćby się walił dach nad głową (przypadek const_cast nie będę tu omawiał)

do definicji tablicy gdzie wartość rozmiaru może ulegać zmianie przejdziesz zapewne w późniejszym czasie i wyglądał będzie tak

int *tab = new int[n];
0

blisko, blisko ; )) wszystko dobrze ale chodzi mi o losowanie bez powtorzeń

0

W takim układzie stwórz zmienną pomocniczą i zapisz do niej pierwsze losowanie, przy drugim losowaniu sprawdz czy jest rowne pierwszemu, jezeli tak, to losuje jeszcze raz

0

Jutro spróbuje swoich sił jeszcze raz ; ) w końcu żeby się nauczyć to trzeba pisać , pisać i jeszcze raz pisać. Mam rację? : )

a po skończeniu kursu ze strony cpp0x.pl czym się dalej zająć? Tzn. za co się zabrać?

1

Za książkę. Z kursów online nie nauczysz się wiele. Co najwyżej jak napisać prostą grę "zgadula" (zgadnij jaką liczbę wylosował komputer).
Kiedy skończysz książkę weź się za kolejną ;] (ja jestem na tym etapie, a zakupiłem sobie jeszcze tyle książek, że nie mogę się doczekać kiedy się za nie zabiorę, mianowicie "Projektowanie Gier", "OpenGL programowanie gier", "Fizyka dla programistów gier", "Perełki programowania gier komputerowych t. 1, 2 i 3" ;])

Sorry za spam

1 użytkowników online, w tym zalogowanych: 0, gości: 1