Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pętla wpisująca na liste dwukierunkową

Ostatnio zmodyfikowano 2016-12-18 18:04
Autor Wiadomość
mikewazowski
Temat założony przez niniejszego użytkownika
pętla wpisująca na liste dwukierunkową
» 2016-12-18 16:11:58
potrzebuje pomocy w zamianie fragmentu BAZA DLA PĘTLI na pętle ktora umozliwi wpisanie nieskonczonej liczby osob ponieważ utworzona przeze mnie pętla (niżej) zapisuje tylko ostatnio wpisaną osobę na liste

// **** KOD
C/C++
#include <iostream>
#include <stdio.h>
#include <cstdlib>
using namespace std;

//****zmienne do wczytywania danych
string i;
int p, x;
string szukam;
//*****osoba
struct node
{
    int data;
    string imie;
    string nazwisko;
    int pesel;
    node * next;
    node * prev;
};
// ****wskazniki na poczatek i koniec i nowy element
node * head;
node * tail;
node * n; //n = new
//*****prototypy
void printforvard( node * head );
void printback( node * tail );
void dodaj_osobe( node * n );
void znajdz_po_nazwisku( string szukam, node * head );

int main()
{
    int c = 6;
    while( c != 5 )
    {
        cout << "MENU" << endl;
        cout << "1-dodaj osobe" << endl;
        cout << "2-wyswietl rosnaco" << endl;
        cout << "3-wyswietl malejaco" << endl;
        cout << "4-zamknij program" << endl;
        cout << "5-wyszukaj" << endl;
        cin >> c;
        switch( c )
        {
        case 1:
            dodaj_osobe( n );
            break;
        case 2:
            printforvard( head );
            break;
        case 3:
            printback( tail );
            break;
        case 4:
            system( "cls" );
            exit( 4 );
            break;
        case 5:
            znajdz_po_nazwisku( szukam, head );
            break;
        }
    }
   
    return 0;
}

void printforvard( node * head ) //wyświetla liste rosnąco
{
    node * temp = head;
    cout << endl << "DANE ROSNĄCO" << endl;
    while( temp != NULL )
    {
        cout << temp->data << ". ";
        cout << "NAZWISKO: " << temp->nazwisko << " ";
        cout << "IMIE: " << temp->imie << " ";
        cout << "PESEL: " << temp->pesel << " ";
        cout << endl;
        temp = temp->next;
        //break;
    }
    cout << endl;
}
void printback( node * tail ) //wyswietla liste malejąco
{
    {
        node * temp = tail;
        cout << endl << "DANE MALEJĄCO" << endl;
        while( temp != NULL )
        {
            cout << temp->data << ". ";
            cout << "NAZWISKO: " << temp->nazwisko << " ";
            cout << "IMIE: " << temp->imie << " ";
            cout << "PESEL: " << temp->pesel << " ";
            cout << endl;
            temp = temp->prev;
            // break;
        }
        cout << endl;
    }
}
void dodaj_osobe( node * n )
{
   
    // BAZA DO PĘTLI
    n = new node;
    n->data = 1;
    cout << "podaj imie: ";
    cin >> i;
    n->imie = i;
    cout << "podaj nazwisko: ";
    cin >> i;
    n->nazwisko = i;
    cout << "podaj pesel: ";
    cin >> p;
    n->pesel = p;
    n->prev = NULL;
    head = n;
    tail = n;
   
    n = new node;
    n->data = 2;
    cout << "podaj imie: ";
    cin >> i;
    n->imie = i;
    cout << "podaj nazwisko: ";
    cin >> i;
    n->nazwisko = i;
    cout << "podaj pesel: ";
    cin >> p;
    n->pesel = p;
    n->prev = tail;
    tail->next = n;
    tail = n;
   
    n = new node;
    n->data = 3;
    cout << "podaj imie: ";
    cin >> i;
    n->imie = i;
    cout << "podaj nazwisko: ";
    cin >> i;
    n->nazwisko = i;
    cout << "podaj pesel: ";
    cin >> p;
    n->pesel = p;
    n->prev = tail;
    tail->next = n;
    tail = n;
   
    n = new node;
    n->data = 4;
    cout << "podaj imie: ";
    cin >> i;
    n->imie = i;
    cout << "podaj nazwisko: ";
    cin >> i;
    n->nazwisko = i;
    cout << "podaj pesel: ";
    cin >> p;
    n->pesel = p;
    n->prev = tail;
    tail->next = n;
    tail = n;
    tail->next = NULL;
   
}


// **** PĘTLA
C/C++
for( x = 1; x < 10000; x++ )
{
    if( x = 1 )
    {
        //  x=1;
        n = new node;
        n->data = x;
        cout << "podaj imie: ";
        cin >> i;
        n->imie = i;
        cout << "podaj nazwisko: ";
        cin >> i;
        n->nazwisko = i;
        cout << "podaj pesel: ";
        cin >> p;
        n->pesel = p;
        n->prev = NULL; // ***** pierwszy wezel
        head = n;
        tail = n;
        //x++;
        break; }
   
    else if( x != 1 )
    {
        n = new node;
        n->data = ++x;
        cout << "podaj imie: ";
        cin >> i;
        n->imie = i;
        cout << "podaj nazwisko: ";
        cin >> i;
        n->nazwisko = i;
        cout << "podaj pesel: ";
        cin >> p;
        n->pesel = p;
        n->prev = tail;
        tail->next = n;
        tail = n;
        tail->next = NULL;
        break;
    }
}
P-155135
pekfos
» 2016-12-18 16:52:53
Po co masz 6 razy napisane to samo?

C/C++
if( x = 1 )
Zły operator.
P-155137
mikewazowski
Temat założony przez niniejszego użytkownika
» 2016-12-18 17:02:49
co proponujesz wstawić zamiast if(x=1)?
P-155138
karambaHZP
» 2016-12-18 17:08:48
P-155140
mikewazowski
Temat założony przez niniejszego użytkownika
» 2016-12-18 17:14:21
niestety nadal zapisuje tylko ostatnio wpisaną osobę
P-155141
mateczek
» 2016-12-18 17:39:02
wywal te "break;" bo ci wyłazi z pętli a kod masz do całkowitego przebudowania.
funkcje na zmiennych globalnych, licznik listy również globalny. Strasznie się czyta.
P-155142
mikewazowski
Temat założony przez niniejszego użytkownika
» 2016-12-18 17:59:06
Tylko że jeśli wywale break; to bedzie mi wołało dane w nieskończonosc. Globalne zmienione na lokalne
P-155143
pekfos
» 2016-12-18 18:04:00
Najlepiej jak zrobisz w tym kodzie porządek. Napisz funkcję dodającą jeden element do listy i wywołaj ją w pętli.
C/C++
for( int i = 0; i < N; ++i )
{
    //wczytaj dane 1 osoby
    std::cin >> a >> b >> c >>...;
    //dodaj jedną osobę
    dodaj_do_listy( lista, a, b, c,...);
}
P-155144
« 1 »
  Strona 1 z 1