-
-
-
oto kod
Cytat: | #include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct student
{
string nazwisko;
string imie;
string wydzial;
int index;
};
int Znajdz_index();
void Znajdz_nazwisko();
void Znajdz_imie();
void Znajdz_wydzial();
void ala();
//void posortuj(int a);
int Wczytaj(student ** tab)
{
ifstream plik("plik.txt");
if (!plik)
cout << "Nie mozna otworzyc pliku\n";
while(*tab !=0)
{
*tab = new student;
getline(plik, (*tab)->nazwisko);
getline(plik, (*tab)->imie);
getline(plik, (*tab)->wydzial);
plik >> (*tab)->index;
if (!plik)
{
delete *tab;
*tab = 0;
}
plik.ignore(numeric_limits<streamsize>::max(), '\n');
++tab;
}
}
int main()
{
int n;
student *tablica_st[0];
while(4)
{
cout<<"menu"<<endl;
cout<<"1. wyswietl"<<endl;
cout<<"2. znajdz po index"<<endl;
cout<<"3. znajdz po nazwisko"<<endl;
cout<<"4. znajdz po imie"<<endl;
cout<<"5. znajdz po wydzial"<<endl;
cout<<"6. posortuj"<<endl;
cin>>n;
switch(n)
{
case 1:
Wczytaj(tablica_st);
for (student ** tab = tablica_st; *tab; ++tab)
{
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
break;
case 2:
Znajdz_index();
break;
case 3:
Znajdz_nazwisko();
cout<<endl<<endl;
break;
case 4:
Znajdz_imie();
break;
case 5:
Znajdz_wydzial();
break;
case 6:
ala();
break;
}
}
system("pause");
return 0;
}
int Znajdz_index()
{
student *tablica_st[0];
Wczytaj(tablica_st);
int a;
cin>>a;
for (student ** tab = tablica_st; *tab; ++tab)
if((*tab)->index == a )
{
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
system("pause");
return 0;
}
void Znajdz_nazwisko()
{
student *tablica_st[0];
Wczytaj(tablica_st);
string a;
cout<<endl<<"Podaj nazwisko szukanego studenta: ";
cin>>a;
for (student ** tab = tablica_st; *tab; ++tab)
if((*tab)->nazwisko == a )
{
cout<<endl<<"Dane szukanego studenta: "<<endl<<endl;
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
system("pause");
}
void Znajdz_imie()
{
student *tablica_st[0];
Wczytaj(tablica_st);
string a;
cin>>a;
for (student ** tab = tablica_st; *tab; ++tab)
if((*tab)->imie == a )
{
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
system("pause");
}
void Znajdz_wydzial()
{
student *tablica_st[0];
Wczytaj(tablica_st);
string a;
cin>>a;
for (student ** tab = tablica_st; *tab; ++tab)
if((*tab)->wydzial == a )
{
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
system("pause");
}
void ala()
{
student *tablica_st[0];
int T[13];
int y,x,f,a=0;
Wczytaj(tablica_st);
for (student ** tab = tablica_st; *tab; ++tab, ++a)
{
T[a] = (*tab)->index;
}
for( int m = 0; m<13; m++)
for(int i = 0; i<13; i++)
if (T[i]>T[i+1])
{
y=T[i];
x=T[i+1];
T[i+1]=y;
T[i]=x;
}
for(int n=0; n<13; n++)
cout<<n<<" - "<<T[n]<<endl;
system("pause");
}
/*
void posortuj(int a)
{
student *tablica_st[0];
Wczytaj(tablica_st);
for (student ** tab = tablica_st; *tab; ++tab)
if((*tab)->index == a )
{
cout<<"index nr "<<(*tab)->index<<endl;
cout<<"nazwisko "<<(*tab)->nazwisko<<endl;
cout<<"imie "<<(*tab)->imie<<endl;
cout<<"wydzial "<<(*tab)->wydzial<<endl<<endl;
}
system("pause");
// return 0;
}
*/
|
Mam problem z funkcją sortuj, otóż program ma mieć funkcje sortowania od najmniejszej do najwiekszej i odwrotnie. Napisałem wiec funkcje "ala"(nie pytajcie dlaczego taka nazwa:P) która wczytuje numery indeksu i zapisuje je w tablicy T już posortowane (to 13 w pętli to z powodu rozmiaru pliku tekstowego musze wrzucić gdzieś pętle która bedzie liczyć ilość studentów, ale tego też nie umiem zrobić). Następnie chciałem zmodyfikować troche funkcje szukaj_index i nazwałem ją posortuj ale od jakiejś zmiennej. chodziło o to by w funkcji ala napisać pętle np for(int i=0; i<13, i++) posortuj(T[i]); Tylko że to nie działa nie wiedzieć dlaczego... poza tym program po wykonaniu jakiejś fukcji switcha nie wraca do menu i zgłasza mi jakiś windowsowski błąd... pomóżcie prosze...
Treść pliku tekstowego to np:
Nowak
Jan
EiT
123456
Burak
Staszek
SKP
23456
Igrekowski
Eugeniusz
IZ
34567
d41d8cd98f00b204e9800998ecf8427e
-
-
-
sortowanie, poprawie twoje, trochę tam zagmatwałeś, (ubierz to sobie potem w wskaźniki i nazwij po swojemu)
Cytat: |
//SORTOWANIE OD NAJMNIEJSZEJ DO NAJWIĘKSZEJ
//x - jakaś tam tablica;
//a - pomocnicza zmienna
...
int a; //zakładam że nie ma poćwiartowanych studentów
n = sizeof (x) //sprawdza rozmiar tablicy
for(int i = 0, i < n, i++)
for(int j = i, j < n, j++) // j = i, bo nie ma sensu porównywać z ułożonymi już argumentami.
if(x[i] > x[j]){
a = x[i];
x[i] = x[j];
x[j] = a;
}
...
|
Cytat: |
//SORTOWANIE OD NAJWIĘKSZEJ DO NAJMNIEJSZEJ
//x - jakaś tam tablica;
//a - pomocnicza zmienna
...
int a;
n = sizeof (x)
for(int i = n, i > 0, i--)
for(int j = i, j > 0, j--)
if(x[i] > x[j]){
a = x[i];
x[i] = x[j];
x[j] = a;
}
...
|
ilość studentów w tablicy, zakładam, że chodzi Ci o to, że nie na każdym miejscu musi być student. w sumie tablicę jako dynamiczną bym Ci odradził. Warto się pouczyć w takim przypadku tablic wektorowych czy jakoś tak to się w C++ zwało. Wybacz nie pamiętam. Jeśli długość tablicy to ilość studentów to masz Cytat: | n = sizeof (x) //sprawdza rozmiar tablicy | , w przeciwnym razie:
Cytat: |
//s - liczba studentów
...
int s = 0; //znów zakładam, ze student to całość, chodź o to nie zawsze latwo
while(x[i] != 0){
s++; //dodaj studencika
i++; // i plusujemy
}
...
//założenia: NIE ma luk pomiędzy studentami, w przeciwnym razie radzę użyć: Cytat: |
int n = sizeof (x);
int s = 0;
while(i < n)
if(x[i] != 0){
s++;
i++;
} |
|
co do posortuj co tam robi (wprawdzie w komentarzu) ale idea już widać była return?? Chłopie void nic nie zwraca, całe nic ;].
A co do wywoływania funkcji w funkcji, to jest z tym problem, dawno nie programowałem C++ wiec nie pamiętam rozwiązania. Ale generalnie, żeby odpalić funkcję w funkcji to trochę problematyczne. Może tutaj ktoś Ci inny pomoże, albo wujek Google doradzi ;]
Nie przejmuj się jak napotkasz u mnie błędy składni nie mam kompilatora w oczach Ale idea jest poprawna
d41d8cd98f00b204e9800998ecf8427e
Powered by phpBB modified by Przemo © 2003 phpBB Group. Then, after many years modified again, this time by Piotrek © 2014 Strona wygenerowana w 18,1ms. Zapytań do SQL: 14
|