[C++] Struktury, tablice, rekurencja

mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Struktury, tablice, rekurencja

Post autor: mickolo »

Mam tutaj kolejny problem który napotkałem:

1.stworzyc plik "imiona.txt" i wypelnic go \(\displaystyle{ 5}\) imionami oddzielonymi spacjami;
2. w programie zdefiniowac strukturę o nazwie kandydat zawierajaca nastepujace pola:
char imie[12] int wiek int wzrost
3.napisac bezparametrową funkcję zwracajaca obiekt typu kandydat, któego pola wypełnione są nastepujaco:
-pole imie wzytane z pliku "imiona.txt"
-pole wiek losowane z zakresu [15;30]
-pole wzrost losowane z zakresu \(\displaystyle{ [120;200]}\)
4.w funkcji main() zadeklarowac \(\displaystyle{ 5}\)-elementowa tablice oiektow knadydat o nazwie konkurs a nastepnie wypelnic ja przy pomocy funkcji z poprzedniego podpunktu (imiona kandydatow maja byc kolejnymi imionami z pliku "txt")
5.napisac rekurencyjna funkcje pobierajaca jako jeden z parametrów tablice konkurs, wyswietlajaca na konsoli pola wszystkich jej elementow w postaci komunikatu np. "Marek, 20 lat, 172 cm";

oto moj kod:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cmath>
#include <ctime>
using namespace std;

struct kandydat{
       char imie[12];
       int wiek;
       int wzrost;
};

kandydat fun()
{
         kandydat k;
         ifstream plik;
         plik.open("imiona.txt");
         plik>>k.imie;
         plik.clear();
         plik.close();
         k.wiek=rand()%(30-15+1)+15;
         k.wzrost=rand()%(200-120+1)+120;
         return k;
}
         
void rekurencja(kandydat konkurs[5], int lewy, int prawy)
{
           //na tą  funkcję nie mam zadnego pomysłu                 
}
         
int main()
{
    srand(time(0));
    kandydat konkurs[5];
   kandydat k= fun();
   
   for(int i=0; i<5; i++)
   {
           konkurs[i]=fun();
   }
   
system("pause");
    return 0;
}

problem polega na tym ze nie moge wypisac elementow tablicy za pomoca funkcji poniewaz jej nie mam i odnosze wrazenie ze źle zapisuje poszczególne rzeczy do tej tablicy (wypisza sie 5 razy to samo).
funkcję fun() napisałęm za Waszą wcześniejszą pomocą (w poprzednim podobnym zadaniu)
proszę o modyfikację
Ostatnio zmieniony 10 cze 2012, o 18:03 przez Afish, łącznie zmieniany 2 razy.
Powód: Nowe zadania umieszczaj w nowych tematach. Poprawa wiadomości.
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Struktury, tablice, rekurencja

Post autor: witekkq »

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cmath>
#include <ctime>
using namespace std;
ifstream plik;
struct kandydat{
       char imie[12];
       int wiek;
       int wzrost;
};

kandydat fun()
{
         kandydat k;        
         plik>>k.imie;
         k.wiek=rand()%(30-15+1)+15;
         k.wzrost=rand()%(200-120+1)+120;
         return k;
}
         
void rekurencja(kandydat konkurs[5], int lewa, int prawa)
{
           //na tą  funkcję nie mam zadnego pomysłu
	if(lewa<prawa)
	{
	cout<<"Imie: "<<konkurs[lewa].imie<<", ma "<<konkurs[lewa].wiek<<"lat , oraz "<<konkurs[lewa].wzrost<<" centymetrow wzrostu"<<endl;
	rekurencja(konkurs,lewa+1,prawa);
	}
}

int main()
{
	
	plik.open("imiona.txt");
	if(plik.good()) cout<<"Uzykales dostep do pliku
";
	else cout<<"Blad w pliku
";
    srand(time(0));
	kandydat konkurs[5];
	
   
   for(int i=0; i<5; i++)
   {
           konkurs[i]=fun();
   }
   plik.close();

   rekurencja(konkurs,0,5);
	system("pause");
    return 0;
}
co do rekurencji żeby przyjmowała tylko jeden argument trzeba pomyśleć, ale już widzę że hiszpanie się rozgrzewają...
mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Struktury, tablice, rekurencja

Post autor: mickolo »

Witekkq wszystko jest ok bo jak mowi polecenie tablica miala byc "jednym z parametrów".
Dzięki za pomoc, wszystko juz jest jasne !
ODPOWIEDZ