[C++] Lista jednokierunkowa przechowująca studentów

studentka ap
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 2 sty 2013, o 20:30
Płeć: Kobieta
Lokalizacja: słupsk
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: studentka ap »

Mam takie zadanie:
Napisać program, który pozwala wpisać ze standardowego wejścia dane o studentach (imię, nazwisko, album), następnie posortuje dane narastająco wg albumu.
Dane zorganizować w postaci dynamicznej struktury listy jednokierunkowej. Utworzyć odpowiednie funkcje dodawania, wyszukiwania i usuwania elementu listy.
Nie wiem jak się za to zabrać, proszę o pomoc. Z góry dziękuję:)
Ostatnio zmieniony 18 kwie 2013, o 19:09 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: MichalPWr »

Oczywiście sposobów rozwiązania tego problemu jest masa. Jednak jeśli ma to być na strumieniach to proponowałbym wykorzystać trochę mechanizmy które daje nam C++.
Po pierwsze stwórzmy klasę student która przechowuje nam (imię, nazwisko, album), plus wszystkie konieczne metody, akcesory i konstruktory/destruktory. Jako listę możemy stworzyć w main
vector<student> osoba;
Żeby było elegancko możemy przeciążyć operator wczytywania który z marszu wczytuje nam ze standardowego strumienia imię, nazwisko i nr albumu. Podobnie uczynić z wczytywaniem. Jeżeli ma to być lista, a więc mamy mieć możliwość dostania się do każdego elementu naszego wektora, należy przeciążyć operator [] który umożliwi nam szukanie konkretnego elementu wektora.

Poczytaj sobie co nieco o to na pewno wszystko Ci się rozjaśni.

Podkreślam jeszcze raz, jest to jeden z możliwych sposobów rozwiązania. Według mnie dość zgrabny.

PS. Jak to zrobisz, o ile zdecydujesz się na ten sposób, pomyślimy nad reszt, tj obsługą wyjątków i uodpornieniem kodu na wprowadzenie niepopranych danych.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: Ser Cubus »

MichalPWr, w zadaniu jest napisan,e ze chodzi o listę, nie o wektor ^^

studentka ap, uzyj struktury lub klasy, czegos na wzór

Kod: Zaznacz cały

class wezel
{
    int nr_indeksu;
    string imie, nazwisko;
}
poczytaj jeszcze o takim nagłówku

Kod: Zaznacz cały

#include <forward_list>
musisz tylko pomyśleć jak zrobić kontruktor tej klasy i jak zrobić funkcję sortującą, cała reszta jest zawrta w powyższej bibliotece
studentka ap
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 2 sty 2013, o 20:30
Płeć: Kobieta
Lokalizacja: słupsk
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: studentka ap »

Dzisiaj miałam zajęcia z programowania i wykładowca dał nam program prezentujący listę jednokierunkową, kazał nam go przerobić na program, który mowa w zadaniu, ale ja niestety nie wiem o co chodzi:(. To jest zbyt trudne, a facet niezbyt dobrze tłumaczy. Pomożecie? Poniżej program, który mamy przerobić na listę jednokierunkową:

o ile dobrze zrozumialam wykladowce to to jest struktura:

Kod: Zaznacz cały

#include <iostream>
struct Rekord
{
	float dana;

	Rekord *next;
	
};
Rekord *begin = NULL;
extern void DodajnaPoczatek (Rekord * *);
extern void UsunPierwszy (Rekord * &);
extern void DodajnaKoniec (Rekord * &);
extern void PokazListe (Rekord *);


int main(int argc, char *argv[]) 
{
	DodajnaPoczatek	(&begin);
	DodajnaPoczatek	(&begin);
	DodajnaPoczatek	(&begin);

	DodajnaKoniec	(begin);

	PokazListe	(begin);
	while (begin != NULL)//usuwanie calej zwalnianie pamieci
	{
		UsunPierwszy(begin);
		PokazListe (begin);}
		
	return 0;
}
a tutaj są zdefiniowane funkcje ( ale co do tego to pewności nie mam, moge sie mylic):

Kod: Zaznacz cały

#include <iostream>
using namespace std;
struct Rekord
{
	float dana;
	Rekord *next;

};



void DodajnaPoczatek ( Rekord * * lista)
{
	Rekord *el = new Rekord;
	cout<<"podaj liczbe:";
	cin >> el -> dana;
	el -> next = *lista;
	*lista = el;
}//DodajnaPoczatek
void UsunPierwszy ( Rekord *&lista)
{
	if(lista != NULL)	//lista nie jest pusta
	{
		Rekord *pierwszy = lista;
		lista = lista->next;
		delete pierwszy;
		cout<< "Usuniety rekord pierwszy : " << endl;
		};
}//usun pierwszy
void DodajnaKoniec ( Rekord * & lista)
{
	 Rekord *el = new Rekord;
	 cout<< "podaj liczbe:";
	 cin >> el -> dana;
	 el -> next= NULL;
	 Rekord * wsk = lista;
	 if (wsk == NULL)//lista jest pusta
	 {
			lista = el ;
			}
			else
			{
				while ( wsk -> next != NULL)//znalezienie przedostatmniego elementu
				wsk = wsk -> next;
				wsk -> next = el;
				};
}//dadaj na koniec
void PokazListe (Rekord *lista)
{
	if (lista == NULL)
	cout << "Lista pusta !
";
	else{
		cout<<endl;
		Rekord * r = lista;
		while (r!= NULL)
		{
			cout << r-> dana << endl;
			r=r -> next;
			}//while
	}//else
}//pokaz liste
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: Ser Cubus »

z czym masz problem? czego nie rozumiesz?
studentka ap
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 2 sty 2013, o 20:30
Płeć: Kobieta
Lokalizacja: słupsk
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: studentka ap »

na poczatek to wykladowca powiedzial ze mam w strukturze zadeklarowac funkcje ktora bedzie mi umozliwiala dopisywanie studenta do listy, nie wiem jak sie za to zabrac,
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Lista jednokierunkowa przechowująca studentów

Post autor: Ser Cubus »

... ward_list/

... B472%3B263

tutaj jest wszystko, zasada działania jest naprawdę łatwa, to tylko źle wygląda na pierwszy rzut oka
ODPOWIEDZ