Program - pomoc z zadaniem.

0

Witam! Mam pewien problem z dokończeniem zadania, poradziłem sobie z połową.
Oto treść:

Napisz program, który pobierze od użytkownika liczbe n z przedzialu <1,20> i wygeneruje n liczb losowych całkowitych z przedzialu <1,100) umieszczajac je w tablicy. Nastepnie program pobierze liczbe k od użytkownika z przedzialu <1,100), sprawdzi czy liczba ta znajduje się w wygenerownanym ciągu liczb. Jeżeli tak to na ekranie poda ile razy liczba ta pojawiła się w tym ciagu, jeżeli zaś jej nie ma to poda sume wszystkich liczb z tego ciagu.
Zliczenie ile razy liczba wystąpila w ciągu ma być zdefiniowane w funkcji całkowitej "Ile RazywCiagu".

Oto ile udało mi się napisać:

#include <iostream>
#include <conio.h>
#include <ctime>

using namespace std;

int main()
{
    int n,i;
    cout << "Podaj wartosc calkowita z przedzialu od 1 do 20" << endl;
    do
    cin >> n;
    while ((n>20)||(n<1));

    int tab[n];
    srand(time(0));
    for (int i=0;i<n;i++)
        {
            tab[i]=rand()%100-1;
            cout << tab[i] << " ";
        }
    getch();
    return 0;
}

Może ktoś mi z tym pomóc?

0

IMHO nie poradziłeś sobie nawet z pierwszą częścią tego zadania. Nie potrafisz deklarować dynamicznie tablic w C++...

0
RenoKlijo napisał(a)
int n,i;
(...)
int tab[n];

Takiego czegoś nie wolno robić nigdy, przenigdy. Wielkość tablicy niedynamicznej ( czyli takiej jak twoja ) musi być wartością stałą. Więc jeśli chcesz aby twoja tablica była zależna od wartości n to:

 int *tab = new int[ n ]; 
(...)
 // przed końcem programu czyli return 0; posprzątaj po sobie:
delete [] tab;

albo zadeklaruj tablicę int tab[20] i działaj cały czas na takiej, w końcu taka tablica to nie jest dużo :]

0

Takiego czegoś nie wolno robić nigdy, przenigdy.

Wolno w C.
Wolno również, jako rozszerzenie kompilatora gcc, w C++.
Tak że stwierdzenie „nigdy przenigdy” jest nieprawdą.

0

@up czepiasz się :) my mówimy o C++, a nie C.
Fakt, że kompilator dopuszcza takie konstrukcje nie oznacza, że są one dobre. To była celowa hiperbola.

Stroustrup w "Język C++" twierdzi, że:
"W miejscach takich jak zakresy tablic, etykiety wyboru i inicjatory dla enumeratorów, C++ wymaga wyrażenia stałego".
Więc takie udziwnienia kompilatora nie powinny być wykorzystywane.

pozdrawiam

0

Nazywa się to VLA i jest zgodne ze standardem C99. Jednak w tym przypadku mówimy o C++ i tutaj sprawa jest jasna - żaden standard tego nie przewiduje i nie zostanie to nigdy wprowadzone.

0

Przepraszam za ewentualne komplikacje ale jestem początkujący w temacie C++, ale czy ktoś mógłby mi wyjaśnić jak sprawdzić czy ta liczba k, znajduje się w tym wygenerowanym losowo ciągu?

#include <iostream>
#include <conio.h>
#include <ctime>

using namespace std;

int main()
{
    int n,i,k;
    cout << "Podaj wartosc calkowita z przedzialu od 1 do 20" << endl;
    do
    cin >> n;
    while ((n>20)||(n<1));

    int tab[n];
    srand(time(0));
    for (int i=0;i<n;i++)
        {
            tab[i]=rand()%100-1;
            cout << tab[i] << " ";
        }

    cout << "Podaj wartosc calkowita z przedzialu od 1 do 100" << endl;
    do
    cin >> k;
    while ((n>100)||(n<1));

    getch();
    return 0;
}
0

do {} while(); zapomniałeś o klamrze. Możesz użyć funkcji find z algorithm, a jeśli masz szukać więcej niż 1 liczby to posortuj sobie i szukaj binarnie. Oprócz tego popraw tę tablicę lub użyj wektorów.

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