Ĺadny brzuch
Witam wszystkich!!
Potrzebuje pilnej pomocy przy programie. Oto tresc zadania ktore musze wykonac:
"Przerób poprzedni program zamieniajac sposób przechowywania danych w pamieci operacyjnej z tablicy
wskazników na strukture dynamiczna - liste jednokierunkowa. Nale_y rozszerzyc definicje struktury student o składnik
potrzebny do obsługi listy. Niezbedne sa te_ du_e zmiany we wszystkich funkcjach obsługi.
Menu oraz struktura pliku bez zmian:
MENU:
1 – Dodaj studenta
2 – Znajdz
3 – Usun studenta
4 – Drukuj
5 – Zapisz do pliku
6 – Odczytaj z pliku
Q – Wyjscie
Program 11.2. – Uporzadkowana lista jednokierunkowa struktur danych
Przerób program 11.1 wprowadzajac uporzadkowanie listy realizowane w trakcie dodawania nowych elementów. Rekordy
powinny byc dodawane do listy w sposób uporzadkowany według okreslonego klucza, np. Nazwisko (porzadek alfabetyczny)
lub Album (porzadek rosnacy lub malejacy). Wystarczy przyjac jeden z kluczy jako domyslny."
Czy ktos wie jak to zrobic?? albo ma jakis podobny program z wykorzystaniem takiej tablicy dynamicznej??
Oto poprzednia wersja zadania Program 10.2
#include <cstdlib> #include <iostream> #include <fstream> #include <string.h> #include <iomanip> #include <conio.h> using namespace std; const int MAX=100; const int STUD=300; int SZER=10; int i=0; char* Nazwa="lista.csv"; ifstream plik(Nazwa); struct student {char nazwisko[MAX], imie[MAX]; int album;}; int licz_student=0; student *tablica_st[STUD]; /***************************Funkcja wyswietl***********************************/ void Wyswietl_menu() { cout << "\n____________________MENU____________________" << endl<<endl; cout << "1 - Dodaj studenta" << endl; cout << "2 - Znajdz" << endl; cout << "3 - Usun studenta" << endl; cout << "4 - Drukuj" << endl; cout << "5 - Zapis do pliku" <<endl; cout << "6 - Odczyt z pliku" <<endl; cout << "Q - Wyjscie" << endl; cout << "Wybierz opcje: "<< endl; } /****************************Funkcja dodaj*************************************/ void Dodaj_studenta() { student *nowe_student; nowe_student=new student; cout<<"Podaj nazwisko: "; cin.getline(nowe_student->nazwisko,MAX); cout<<"Podaj imie: "; cin.getline(nowe_student->imie,MAX); int i,dlug=strlen(nowe_student->nazwisko); nowe_student->nazwisko[0]=toupper(nowe_student->nazwisko[0]); for(i=1;i<dlug;i++) nowe_student->nazwisko[i]=tolower(nowe_student->nazwisko[i]); nowe_student->imie[0]=toupper(nowe_student->imie[0]); dlug=strlen(nowe_student->imie); for(i=1;i<dlug;i++) nowe_student->imie[i]=tolower(nowe_student->imie[i]); cout<<"Podaj album: "; cin>>nowe_student->album; cin.get(); tablica_st[licz_student] = nowe_student; licz_student++; } /***************************Funkcja znajdz*************************************/ void Znajdz_studenta() { char szukaj[MAX]; if(licz_student==0) { cout<<"Lista jest pusta"<<endl; } else { cout<<"Podaj szukane nazwisko "; cin>>szukaj;cin.get(); int i, dlug=strlen(szukaj); szukaj[0]=toupper(szukaj[0]); cout<<setw(SZER)<<"Nazwisko"<<setw(SZER)<<"Imie"<<setw(SZER)< <"Album"<<endl; for(int i=0; i < licz_student; i++) { if(strcmp(tablica_st[i]->nazwisko, szukaj)==0) { cout<<setw(SZER)<<tablica_st[i]->nazwisko<<setw(SZER)<< tablica_st[i]->imie<<setw(SZER)<<tablica_st[i]->album<<endl; } else cout<<"Nie ma studenta"<<endl; } } } /******************************Funkcja usun************************************/ void Usun_studenta() { char usun[MAX]; cout<<"Podaj nazwisko do usuniecia"<<endl; cin>>usun; cin.get(); int i, dlug=strlen(usun); usun[0]=toupper(usun[0]); for(int i=1;i<dlug;i++) usun[i]=tolower(usun[i]); for(int i=0; i < licz_student; i++) { if (strcmp(tablica_st[i]->nazwisko, usun)==0) { delete tablica_st[i]; for(int j=i;j<licz_student;j++) tablica_st[j]=tablica_st[j+1]; licz_student--; } } } /***************************Funkcja drukuj*************************************/ void Drukuj_wszystko() { if(licz_student==0) { cout<<"Lista jest pusta"<<endl; } else { cout<<setw(SZER)<<"Nazwisko"<<setw(SZER)<<"Imie"<<setw(SZER)< <"Album"<<endl; for(int i=0;i<licz_student;i++) cout<<setw(SZER)<<tablica_st[i]->nazwisko<< setw(SZER)<<tablica_st[i]->imie<<setw(SZER)<<tablica_st[i]->album< <endl; } } /*************************Funkcja zapisz plik**********************************/ void Zapis_plik(ofstream &Plik) { for(int i=0;i<licz_student;i++) { Plik<<tablica_st[i]->nazwisko<<","<<tablica_st[i]-> imie<<","<<tablica_st[i]->album<<endl; } } /*************************Funkcja otworz plik**********************************/ void Otworz_plik() { ifstream lista ("lista.csv"); if(!lista) { cerr <<"Pliku nie udało sie otworzyc !"<<endl; return ; } std::cout << lista.rdbuf(); lista.close (); } /****************************Koniec funkcji************************************/ int main() { { char znak; do { Wyswietl_menu(); cin >> znak; cin.ignore(255,'\n'); switch(znak) { case'1': Dodaj_studenta();break; case'2': Znajdz_studenta();break; case'3': Usun_studenta();break; case'4': Drukuj_wszystko();break; case'5': { cout<<"Podaj nazwe pliku do zapisu: lista.csv "; ofstream plik_zap("lista.csv"); if (!plik_zap) cerr <<"Pliku nie udalo sie zapisac !"<<endl; else { Zapis_plik(plik_zap); plik_zap.close(); };break; } case'6': Otworz_plik();break; } } while((znak!='q')&&(znak!='Q')); return 0; } system("PAUSE"); return 0; }
Czy ktos wie jak to zrobic??
tak jak to podano w poleceniu - należy utworzyć listę jednokierunkową. Każdy element musi mieć wskaźnik do kolejnego elementu. poszukaj czegoś o listach, na pewno też znajdziesz przykładowe programy. jak będziesz miał jakiś konkretny problem z jakąś funkcją to napisz :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Potrzebuje pilnej pomocy przy programie. Oto tresc zadania ktore musze wykonac:
"Przerób poprzedni program zamieniajac sposób przechowywania danych w pamieci operacyjnej z tablicy
wskazników na strukture dynamiczna - liste jednokierunkowa. Nale_y rozszerzyc definicje struktury student o składnik
potrzebny do obsługi listy. Niezbedne sa te_ du_e zmiany we wszystkich funkcjach obsługi.
Menu oraz struktura pliku bez zmian:
MENU:
1 – Dodaj studenta
2 – Znajdz
3 – Usun studenta
4 – Drukuj
5 – Zapisz do pliku
6 – Odczytaj z pliku
Q – Wyjscie
Program 11.2. – Uporzadkowana lista jednokierunkowa struktur danych
Przerób program 11.1 wprowadzajac uporzadkowanie listy realizowane w trakcie dodawania nowych elementów. Rekordy
powinny byc dodawane do listy w sposób uporzadkowany według okreslonego klucza, np. Nazwisko (porzadek alfabetyczny)
lub Album (porzadek rosnacy lub malejacy). Wystarczy przyjac jeden z kluczy jako domyslny."
Czy ktos wie jak to zrobic?? albo ma jakis podobny program z wykorzystaniem takiej tablicy dynamicznej??
Oto poprzednia wersja zadania Program 10.2
#include <cstdlib> #include <iostream> #include <fstream> #include <string.h> #include <iomanip> #include <conio.h> using namespace std; const int MAX=100; const int STUD=300; int SZER=10; int i=0; char* Nazwa="lista.csv"; ifstream plik(Nazwa); struct student {char nazwisko[MAX], imie[MAX]; int album;}; int licz_student=0; student *tablica_st[STUD]; /***************************Funkcja wyswietl***********************************/ void Wyswietl_menu() { cout << "\n____________________MENU____________________" << endl<<endl; cout << "1 - Dodaj studenta" << endl; cout << "2 - Znajdz" << endl; cout << "3 - Usun studenta" << endl; cout << "4 - Drukuj" << endl; cout << "5 - Zapis do pliku" <<endl; cout << "6 - Odczyt z pliku" <<endl; cout << "Q - Wyjscie" << endl; cout << "Wybierz opcje: "<< endl; } /****************************Funkcja dodaj*************************************/ void Dodaj_studenta() { student *nowe_student; nowe_student=new student; cout<<"Podaj nazwisko: "; cin.getline(nowe_student->nazwisko,MAX); cout<<"Podaj imie: "; cin.getline(nowe_student->imie,MAX); int i,dlug=strlen(nowe_student->nazwisko); nowe_student->nazwisko[0]=toupper(nowe_student->nazwisko[0]); for(i=1;i<dlug;i++) nowe_student->nazwisko[i]=tolower(nowe_student->nazwisko[i]); nowe_student->imie[0]=toupper(nowe_student->imie[0]); dlug=strlen(nowe_student->imie); for(i=1;i<dlug;i++) nowe_student->imie[i]=tolower(nowe_student->imie[i]); cout<<"Podaj album: "; cin>>nowe_student->album; cin.get(); tablica_st[licz_student] = nowe_student; licz_student++; } /***************************Funkcja znajdz*************************************/ void Znajdz_studenta() { char szukaj[MAX]; if(licz_student==0) { cout<<"Lista jest pusta"<<endl; } else { cout<<"Podaj szukane nazwisko "; cin>>szukaj;cin.get(); int i, dlug=strlen(szukaj); szukaj[0]=toupper(szukaj[0]); cout<<setw(SZER)<<"Nazwisko"<<setw(SZER)<<"Imie"<<setw(SZER)< <"Album"<<endl; for(int i=0; i < licz_student; i++) { if(strcmp(tablica_st[i]->nazwisko, szukaj)==0) { cout<<setw(SZER)<<tablica_st[i]->nazwisko<<setw(SZER)<< tablica_st[i]->imie<<setw(SZER)<<tablica_st[i]->album<<endl; } else cout<<"Nie ma studenta"<<endl; } } } /******************************Funkcja usun************************************/ void Usun_studenta() { char usun[MAX]; cout<<"Podaj nazwisko do usuniecia"<<endl; cin>>usun; cin.get(); int i, dlug=strlen(usun); usun[0]=toupper(usun[0]); for(int i=1;i<dlug;i++) usun[i]=tolower(usun[i]); for(int i=0; i < licz_student; i++) { if (strcmp(tablica_st[i]->nazwisko, usun)==0) { delete tablica_st[i]; for(int j=i;j<licz_student;j++) tablica_st[j]=tablica_st[j+1]; licz_student--; } } } /***************************Funkcja drukuj*************************************/ void Drukuj_wszystko() { if(licz_student==0) { cout<<"Lista jest pusta"<<endl; } else { cout<<setw(SZER)<<"Nazwisko"<<setw(SZER)<<"Imie"<<setw(SZER)< <"Album"<<endl; for(int i=0;i<licz_student;i++) cout<<setw(SZER)<<tablica_st[i]->nazwisko<< setw(SZER)<<tablica_st[i]->imie<<setw(SZER)<<tablica_st[i]->album< <endl; } } /*************************Funkcja zapisz plik**********************************/ void Zapis_plik(ofstream &Plik) { for(int i=0;i<licz_student;i++) { Plik<<tablica_st[i]->nazwisko<<","<<tablica_st[i]-> imie<<","<<tablica_st[i]->album<<endl; } } /*************************Funkcja otworz plik**********************************/ void Otworz_plik() { ifstream lista ("lista.csv"); if(!lista) { cerr <<"Pliku nie udało sie otworzyc !"<<endl; return ; } std::cout << lista.rdbuf(); lista.close (); } /****************************Koniec funkcji************************************/ int main() { { char znak; do { Wyswietl_menu(); cin >> znak; cin.ignore(255,'\n'); switch(znak) { case'1': Dodaj_studenta();break; case'2': Znajdz_studenta();break; case'3': Usun_studenta();break; case'4': Drukuj_wszystko();break; case'5': { cout<<"Podaj nazwe pliku do zapisu: lista.csv "; ofstream plik_zap("lista.csv"); if (!plik_zap) cerr <<"Pliku nie udalo sie zapisac !"<<endl; else { Zapis_plik(plik_zap); plik_zap.close(); };break; } case'6': Otworz_plik();break; } } while((znak!='q')&&(znak!='Q')); return 0; } system("PAUSE"); return 0; }
Czy ktos wie jak to zrobic??
tak jak to podano w poleceniu - należy utworzyć listę jednokierunkową. Każdy element musi mieć wskaźnik do kolejnego elementu. poszukaj czegoś o listach, na pewno też znajdziesz przykładowe programy. jak będziesz miał jakiś konkretny problem z jakąś funkcją to napisz :)