MrEfendi icon

Struktury w dynamicznych tablicach ATH Bielsko-Biała C++

MrEfendi | PRO | 01/11/16 03:53:23 PM UTC | 0 ⭐ | 322 👁️ | Never ⏰ | []
C++ |

4.08 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
#include <string>
 
using namespace std;
 
/*
 * Struktura obiektu
 */
 
struct TOsoba {
    int id;
    string imie;
    string nazwisko;
};
 
/*
 * Tworzenie nowego obiektu w pamiecu.
 * zwraca wskaźnik do nowego elementu
 */
 
TOsoba * TworzOsobe(int id, string imie, string nazwisko) {
    TOsoba *nowa_osoba = new TOsoba();
 
    nowa_osoba->id = id;
    nowa_osoba->imie = imie;
    nowa_osoba->nazwisko = nazwisko;
 
    return nowa_osoba;
}
 
/*
 * Tworzy dynamiczną tablicę o wielkości "i"
 */
 
void TworzTablice(int i, TOsoba **&tab) {
    tab = new TOsoba*[i];
}
 
/*
 * Uwuwa całą tablicę osób. Pozostaje tylko pusty wskaźnik który można wypełnić nową tablicą
 */
 
void UsunTabliceOsob(TOsoba **&tab) {
    delete[] tab;
}
 
/*
 * Dodanie nowego elementu do zadaniej tablicy dynamicznej.
 * Funkcja potrzebuje wskaźnik do obiektu w pamięciu typu TOsoba
 */
 
void DodajElementDoTablicy(TOsoba *obiekt, TOsoba **&tab) {
    tab[obiekt->id] = obiekt;
}
 
/*
 * Funckja wyświetlenia osoby o podanym id w tabeli.
 * ID w tabeli musi być równe ID w tablicy dynaminczej! <-- założenie aplikacji!
 */
 
void WyswietlOsobe(int i, TOsoba **&tab) {
     cout << "ID = " << tab[i]->id << " i:" << tab[i]->imie << " n:" << tab[i]->nazwisko << endl;
}
 
/*
 * Funckje wyszukiwania w bazie po imieniu albo nazwisku
 * zwaraca -1 jeżeli brak wyniku
 */
 
int ZnajdzOsobeBoImieniu(string imie, TOsoba **&tab, int wielkosc_tab) {
    for (int i = 0; i < wielkosc_tab; i++) {
        if (tab[i]->imie == imie) {
            return i;
        }
    }
    return -1;
}
 
int ZnajdzOsobePoNazwisku(string nazwisko, TOsoba **&tab, int wielkosc_tab) {
    for (int i = 0; i < wielkosc_tab; i++) {
        if (tab[i]->nazwisko == nazwisko) {
            return i;
        }
    }
    return -1;
}
 
/*
 * Wykonanie aplikacji
 */
 
int main() {
 
    // definicja bazy
    TOsoba **baza;
 
    // jak wielka baza
    int wielksc_bazy = 5;
 
    // stworzenie bazy
    TworzTablice(wielksc_bazy, baza);
 
    // dodanie elementow
    DodajElementDoTablicy(TworzOsobe(0, "Andrzej", "Kowalski"), baza);
    DodajElementDoTablicy(TworzOsobe(1, "Janusz", "Pacult"), baza);
    DodajElementDoTablicy(TworzOsobe(2, "Kartofel", "Kowalska"), baza);
    DodajElementDoTablicy(TworzOsobe(3, "Marchewka", "Mariacki"), baza);
    DodajElementDoTablicy(TworzOsobe(4, "Sraczka", "Jagoda"), baza);
 
    // wyswietlenie wszystkich wpisow z bazy
    for (int i = 0; i < wielksc_bazy; i++) {
        WyswietlOsobe(i, baza);
    }
 
    // operacje wyszukiwania
    cout << endl << "Wyszukaj po imieniu Kartofel:" << endl;
    int pozycja_w_db = ZnajdzOsobeBoImieniu("Kartofel", baza, wielksc_bazy);
    if (pozycja_w_db >= 0) {
        cout << "Znaleziono:";
        WyswietlOsobe(pozycja_w_db, baza);
    } else {
        cout << "Nie znaleziono :/" << endl;
    }
 
    cout << endl << "Wyszukaj po imieniu Stanislaw:" << endl;
    pozycja_w_db = ZnajdzOsobeBoImieniu("Stanislaw", baza, wielksc_bazy);
    if (pozycja_w_db >= 0) {
        cout << "Znaleziono:";
        WyswietlOsobe(pozycja_w_db, baza);
    } else {
        cout << "Nie znaleziono :/" << endl;
    }
 
    cout << endl << "Wyszukaj po nazwisku Jagoda:" << endl;
    pozycja_w_db = ZnajdzOsobePoNazwisku("Jagoda", baza, wielksc_bazy);
    if (pozycja_w_db >= 0) {
        cout << "Znaleziono:";
        WyswietlOsobe(pozycja_w_db, baza);
    } else {
        cout << "Nie znaleziono :/" << endl;
    }
 
    cout << endl;
 
    // przyklad usuniecia bazy
    UsunTabliceOsob(baza);
 
    cout << "nowe def." << endl;
 
    // ponowne utworzenie bazy na starym wskaźniku w pamięci
    wielksc_bazy = 2;
    TworzTablice(wielksc_bazy, baza);
 
    // dodanie przykladowych danych do bazy
    for (int i = 0; i < wielksc_bazy; i++) {
        DodajElementDoTablicy(TworzOsobe(i, "Andrzej", "Kowalski0"), baza);
    }
 
    // wyświetlenie przykładowych danych
    for (int i = 0; i < wielksc_bazy; i++) {
        WyswietlOsobe(i, baza);
    }
 
    return 0;
}

Comments