Program nie dziala jak powinien. Hilfe!

0

Witam, po pierwszym zrezygnowaniu z nauki programowania, postanowilem, ze sprobuje jeszcze raz i napisze program, ktory bedzie pytal uzytkownika o wybranie 5 szuflad sposrod 10. Kiedy ten poda jakie szuflady chce sprawdzic, komputer pokaze jakie wartosci byly w kazdej z szuflad.

Cos tam nawet powychodzilo, ale :
1.nie pasuje mi "if". Nic sobie program nie robi mimo iz napisalem nawet "12".
2.chce, zeby program, w kazdej szufladzie mial inna wartosc.

#include <iostream>
#include <windows.h>
#include <time.h>
#include <cstdlib>
#include <conio.h>

using namespace std;

int szuflady[10], wybor[5], numer;
int i, j;
int main()
{

cout<<"Mozesz sprawdzic co jest w 5 szufladach. Podaj liczbe 1..10 : "<<endl;



    for(i=1 ; i<=5 ; i++)
    {
    numer++;

    cout<<"Podaj numer szuflady : "<<numer<<". ";
    cin>>wybor[i];

    }
    if(wybor[i]<=10)
        {


            for(j=1; j<=5 ; j++)
            {
            srand(time(NULL));
            int szuflady = rand()%100+1;
            cout<<"W szufladzie nr: "<<wybor[j]<<" jest liczba : "<<szuflady;
            cout<<endl;
            }

        }



        else
        {
        cout<<"Nie ma takiej szuflady.";
        }




    getch();
    return 0;
}


 
1
  1. Po co ci zmienna numer ? (masz iterator i )
  2. czemu jak podajesz nr szuflady to wypisujesz wartości szuflad nr 1..5 ?
  3. co jeśli podam nr szuflady = -1 ?

Nie wiem czemu zrezygnowałeś wcześniej ale nie przerabiając żadnego kursu ze zrozumieniem nie ma szans na naukę programowania i szybko się człowiek zniechęca.
Najlepiej zastanów się nad problemem, rozpisz to sobie na kartce, narysuj w programie graficznym, cokolwiek co Ci pomoże. Następnie ogarnij ze zrozumieniem jakieś kursy, podstawy C/C++ (mnóstwo filmów nawet w języku PL na YT, wiele blogów z poradnikami itp) i potem zacznij realizować problemy.

2
  • for(i=1 ; i<=5 ; i++) - wychodzisz poza granicę tablicy. Elementy są numerowane od zera więc nie zaczynasz iteracji od jedynki tylko od zera i nie mniejsze równe pięć tylko mniejsze od pięciu;
  • niepotrzebnie używasz zmiennych globalnych - to te ponad funkcją main. Zamień je na zmienne lokalne;
  • niepotrzebny getch(); - nowowczesny IDE potrafi sam albo na żądanie zatrzymać konsolę po zakończeniu działania programu;
  • niepotrzebne nagłówli conio.h, i windows.h;
  • nie rób tego: srand(time(NULL)); wewnątrz pętli tylko zrób raz na początku main;
  • masz niezainicjalizowane zmienne. Wiem, że globalne zmienne są inicjalizowane zerami ale po pierwsze globalnych zmiennych tutaj nie potrzebujesz (wcale ich nie potrzebujesz), a po drugie inkrementowanie zmiennej lokalnej, która nie została zainicjalizowana prowadzi do tego, że inkrementujesz śmieci;
  • zmienne używane w pętli for można tworzyć wewnątrz pętli np: for(int i=0...). Nie musisz robić tego jak w czystym c;
  • zamien time.h na ctime tak jak masz z cstdlib;
  • zamiast gołych tablic stosuj vector. Kontener bardziej elastyczny i można na bieżąco dodawać nowe elementy.
0

Teraz mi w ogole nie dziala ;3

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main()
{

cout<<"Mozesz sprawdzic co jest w 5 szufladach. Podaj liczbe 1..10 : "<<endl;

int szuflady[10], wybor[5];

srand(time(NULL));
int szuflady = rand()%100+1;


    for(int i=0 ; i<5 ; i++)
    {


    cout<<"Podaj numer szuflady : "<<i<<". ";
    cin>>wybor[i];

    }
    if(wybor[i]<=10)
        {


            for(int j=1; j<=5 ; j++)
            {
            cout<<"W szufladzie nr: "<<wybor[j]<<" jest liczba : "<<szuflady;
            cout<<endl;
            }

        }



        else
        {
        cout<<"Nie ma takiej szuflady.";
        }




    getch();
    return 0;
}


 
1

Chodziło Ci pewnie o coś takiego jak to:

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

int main ()
{
    srand(time(NULL));
    vector<int> szuflady;

    unsigned ilosc = 10;
    for(unsigned i = 0; i < ilosc; ++i){
        szuflady.push_back(rand() % 100 + 1);
        cout << "Szuflada [" << i << "]: " << szuflady[i] << endl;
    }

    unsigned ileWybrac = 5;
    for(unsigned i = 0; i < ((ileWybrac < ilosc) ? ileWybrac : 0); ++i){
        unsigned numer = rand() % ilosc;
        cout << "Wybrany element: [" << numer << "]: " << szuflady[numer] << endl;
    }

    return 0;
}

Tutaj program sam losuje sobie, które pięć szuflad "otworzyć" i dodatkowo dba o to, żeby nie losować z ilości większej niż ilość szuflad. Napisane tak bardziej klasycznie z srand'em. Możesz jeszcze wykorzystać generatory liczba pseudolosowych, które są w <random> żeby być bliżej najnowszego standardu, nazwijmy to :)

0

Niektorych linijek w ogóle nie rozumiem :@ jutro przekompiluje i zobaczę jak to działa.

2

Bo dalej z uporem maniaka wychodzisz poza tablicę, tyle, że w innym miejscu! for(int j=1; j<=5 ; j++) http://kaczus.ppa.pl/art/Skrzynia_porad,18.html#sizeofarray dodatkowo co chcesz wypisac w tej linijce" cout<<"W szufladzie nr: "<<wybor[j]<<" jest liczba : "<<szuflady; zauważ, że masz 2 różne zmienne szuflady - jedna jako liczba, druga jako tablica...

0

O_o nie wiedziałem że to 2 różne zmienne. int szuflady i int szuflady[10]Na razie nie ogarniam tablic, bo to mój 1 program z ich wykorzystaniem.

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