• gtr7  
    Wydział: W-4 EKA
    Rok studiów: 2

    zobacz profil
    szybka wiadomość
  • 0
  • cytuj |

  • 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
    Cytat:
    Kod:
    d41d8cd98f00b204e9800998ecf8427e
  • zygol  
    Wydział: W-8 IZ
    Rok studiów: 1

    zobacz profil
    szybka wiadomość
  • 0
  • cytuj |

  • sortowanie, poprawie twoje, trochę tam zagmatwałeś, (ubierz to sobie potem w wskaźniki :P 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 :P
    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 :P 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