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

Problem z deklaracją.

Ostatnio zmodyfikowano 2011-07-08 20:59
Autor Wiadomość
asia97
Temat założony przez niniejszego użytkownika
Problem z deklaracją.
» 2011-07-08 19:43:43
Witam :) w ramach ćwiczeń napisałam mały program.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int losujLiczby( int tab[], int ile, int min )
{
    int licznik;
    int cis;
    do
    {
        cis =( rand() % ile ) + min;
        licznik++;
    } while( licznik < 5 );
   
    return cis;
}

void wypiszLiczby( int tablica[], int i )
{
    for( int indeks = 0; indeks < i; indeks++ )
         std::cout << tablica[ indeks ] << std::endl;
   
}

int main()
{
    srand( time( NULL ) );
    int los[ 4 ];
    losujLiczby( tab, 4, 5, 15 );
    wypiszLiczby( los, 4 );
    return 0;
}

Kiedy chcę go skompilować pisze 'error: 'tab' was not declared in this scope'
Dosyć często tak mam. O co chodzi ? :)
P-35571
szyx_yankez
» 2011-07-08 19:49:27
Odwołujesz się do tablicy której nie zdeklarowałaś.
Rozwiązanie: zdeklarowanie zmiennej/tablicy zmiennych, przed ich pierwszym użyciem/odwołaniem.
P-35572
Savail
» 2011-07-08 20:07:28
Zmienna int tab, której użyłaś jako argument w funkcji istnieje tylko w obrębie tej funkcji więc poza nią już nie możesz jej używać ^^
Edit: Dzięki za poprawę DejaVu, zawsze mam problemy z teorią :P
P-35573
DejaVu
» 2011-07-08 20:08:32
Funkcja posiada argumenty.
Szablon posiada parametry.
W jej przypadku mowa jest o argumentach.
P-35574
asia97
Temat założony przez niniejszego użytkownika
» 2011-07-08 20:21:50
Dopisałam
int tab[ 4 ];
i teraz pisze, że jest za dużo argumentów w funkcji losujLiczby. Co robię źle ?
P-35575
ison
» 2011-07-08 20:41:10
C/C++
int main()
{
    srand( time( NULL ) );
    int los[ 4 ];
    losujLiczby( tab, 4, 5, 15 ); //tu chyba chodziło Ci o los a nie o tab? ;)
    wypiszLiczby( los, 4 );
    return 0;
}


C/C++
int losujLiczby( int tab[], int ile, int min )
ta funkcja przyjmuje 3 argumenty
C/C++
losujLiczby( tab, 4, 5, 15 );
a tu próbujesz jej przekazać 4

w funkcji losujLiczby zwracasz tylko 1 zmienną a powinnaś raczej podstawiać wyniki do tablicy (wtedy funkcja nie powinna nic zwracać czyli mieć typ void)

C/C++
int losujLiczby( int tab[], int ile, int min )
zabrakło jeszcze argumentu max ;)

C/C++
cis =( rand() % ile ) + min;
zamiast podstawiać do cis powinnaś raczej podstawiać do konkretnych elementów tablicy (w końcu po to ją chyba przekazujesz?)

C/C++
int licznik;
tej zmiennej używasz do iteracji więc powinna być wyzerowana:
C/C++
int licznik = 0;

C/C++
while( licznik < 5 );

raczej
C/C++
while( licznik < ile );


to by było chyba na tyle :)
P-35576
asia97
Temat założony przez niniejszego użytkownika
» 2011-07-08 20:55:29
Dziękuję panom bardzo za pomoc :)
Jeszcze tylko jedno pytanie odnośnie 'zamiast podstawiać do cis powinnaś raczej podstawiać do konkretnych elementów tablicy (w końcu po to ją chyba przekazujesz?)'. O co dokładnie chodzi ? Przepraszam, że tak ciągle pytam, ale jestem początkująca :)

Edit
Zmieniłam na void, ale wylosowane liczby są jakieś gigantyczne.
P-35577
ison
» 2011-07-08 20:57:32
przekazujesz int tab[] w argumencie czyli wskaźnik na tablicę, więc nie ma potrzeby zwracania niczego (tak samo jak to zrobiłaś w funkcji wypiszLiczby)
C/C++
void losujLiczby( int tab[], int ile, int min, int max )
{
    int licznik = 0;
    do
    {
        tab[ licznik ] = wylosowana wartosc;
        licznik++;
    } while( licznik < ile );
   
}
P-35578
« 1 » 2
  Strona 1 z 2 Następna strona