• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Argumenty programu są zerowe

Object Storage Arubacloud
0 głosów
72 wizyt
pytanie zadane 7 grudnia 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
zamknięte 8 grudnia 2018 przez Alan Kruszyński

Próbuję zlokalizować dlaczego program wypisuje zerowe wartości zmiennych. Problem leży prawdopodobnie w odczycie z pliku, ponieważ wywoływana jest funkcja wyszukaj z argumentem k1, gdzie k1 jest zmienną typu int wczytywaną z pliku. Dla sprawdzenia funkcja wypisuje wartość swojego argumentu i wtedy na ekranie pojawia się 0. Program jest trochę rozległy. W pliku tekstowym do odczytu znajdują się wypisane w jednej linii liczby 2001 13666 4 7 -1 100001.

#include <iostream>
#include <time.h>
#include <fstream>
#include <cstdlib>

using namespace std;

int x, k1, k2, k3, k4, k5, tab[2001], licznik = 0; // X wskazuje ilosc wylosowanych struktur, licznik to liczba elementow listy

struct element {
    int klucz;
    double d;
    char c;
    element * nastepny;
    element * poprzedni;
};

struct Lista {
    element * pierwszy;
    element * ostatni;
} lista {NULL, NULL};

void odczyt_pliku(){
    fstream plik;
    plik.open("labin02.txt", ios::in);

    if(plik.good()==false){
        cout<<"Nie udalo sie odczytac pliku lub plik nie istnieje";
        exit(0);
    }
plik >>x>>k1>>k2>>k3>>k4>>k5;
plik.close();
}

/*

usun wszystko
*/
int losuj_int(){
    int wylosowana, j;
    if (licznik ==0){
        wylosowana = rand()%10000-1000;
        tab[licznik]=wylosowana;
        licznik++;
    }
    else{
        while(j<=licznik) {

        wylosowana = rand()%10000-1000;

        for(j = 0; j <=licznik; j++){
            if(wylosowana == tab[j]){
                    break;
                }
            }
    licznik++;
    tab[licznik] = wylosowana;

    }

}
  return wylosowana;
}

double losuj_double(){
        int losowa = rand()%10000-1000;
        double wylosowana = losowa/100;

 return wylosowana;
}

void wstaw_x_nowych(int X){
    for(int i = 0; i<=X; i++){
        if (licznik==0){ //przypadek gdy lista jest pusta
            element*nowy = new element;//utworz element
            nowy->c=(char)84;
            nowy->d = losuj_double();
            nowy->klucz = losuj_int();
            lista.pierwszy = nowy;
            lista.ostatni = nowy;
            nowy->nastepny = nowy;
            nowy->poprzedni = nowy;
            licznik++;
        }
        else{//przypadek gdy lista nie jest pusta
            element*nowy = new element;
            nowy->c=(char)84;
            nowy->d = losuj_double();
            nowy->klucz = losuj_int();
            if(nowy->klucz < lista.pierwszy->klucz){//przypadek gdy klucz nowego elementu jest mniejszy od pierwszego na liscie
                    nowy->nastepny = lista.pierwszy;
                    nowy->poprzedni = lista.ostatni;
                    lista.pierwszy->poprzedni = nowy;
                    lista.ostatni->nastepny = nowy;
                    lista.pierwszy = nowy;
                    licznik++;
            }
            if(nowy->klucz>lista.ostatni->klucz){//przypadek gdy klucz nowego elementu jest wiekszy od ostatniego na liscie
                    nowy->poprzedni = lista.ostatni;
                    nowy->nastepny=lista.pierwszy;
                    lista.ostatni->nastepny = nowy;
                    lista.pierwszy->poprzedni = nowy;
                    lista.ostatni = nowy;
                    licznik++;
            }
            else{//przypadek gdy klucz nowego elementu miesi sie miedzy pierwszym a ostatnim na liscie
                element * wsk = lista.pierwszy;
                while (wsk!=lista.ostatni){
                    if((nowy->klucz > wsk->klucz)&&(nowy->klucz < wsk->klucz)){
                        nowy->poprzedni=wsk;
                        nowy->nastepny=wsk->nastepny;
                        wsk->nastepny = nowy;
                        wsk->nastepny->poprzedni = nowy;
                        licznik++;
                        break;
                        }
                    wsk=wsk->nastepny;
                    }
                }
        }
    }
    cout<<endl<<"Dodano "<<X<<" nowych wezlow"<<endl;
}

void wstaw_nowy(int k){
    element * wsk = lista.pierwszy;

    while(wsk->nastepny != lista.pierwszy){
        if(wsk->klucz == k){
            cout<<"Element o kluczu "<<k<<" juz istnieje!"<<endl;
            return;
        }
        wsk=wsk->nastepny;
    }

            element*nowy = new element;
            nowy->c=(char)84;
            nowy->d = losuj_double();
            nowy->klucz =k;
                if(nowy->klucz < lista.pierwszy->klucz){//przypadek gdy klucz nowego elementu jest mniejszy od pierwszego na liscie
                    nowy->nastepny = lista.pierwszy;
                    nowy->poprzedni = lista.ostatni;
                    lista.pierwszy->poprzedni = nowy;
                    lista.ostatni->nastepny = nowy;
                    lista.pierwszy = nowy;
                    licznik++;
                }
                if(nowy->klucz>lista.ostatni->klucz){//przypadek gdy klucz nowego elementu jest wiekszy od ostatniego na liscie
                    nowy->poprzedni = lista.ostatni;
                    nowy->nastepny=lista.pierwszy;
                    lista.ostatni->nastepny = nowy;
                    lista.pierwszy->poprzedni = nowy;
                    lista.ostatni = nowy;
                    licznik++;
                }
                else{//przypadek gdy klucz nowego elementu miesi sie miedzy pierwszym a ostatnim na liscie
                    element * wsk = lista.pierwszy;
                    while (wsk!=lista.ostatni){
                        if((nowy->klucz > wsk->klucz)&&(nowy->klucz < wsk->klucz)){
                            nowy->poprzedni=wsk;
                            nowy->nastepny=wsk->nastepny;
                            wsk->nastepny = nowy;
                            wsk->nastepny->poprzedni = nowy;
                            licznik++;
                            break;
                        }
                    wsk=wsk->nastepny;
                    }
                }

}

int licz_wezly(){
    int licznik2 = 0;
    element * wsk = lista.pierwszy;
        while(wsk->nastepny != lista.pierwszy){
            licznik2++;
            wsk=wsk->nastepny;
        }
        return licznik2;
}

void wyszukaj(int k){
  element * wsk = lista.pierwszy;
  int pozycja = 0;
  while(wsk && wsk->klucz != k)
  {
    wsk = wsk->nastepny;
    if(wsk == lista.pierwszy) {
      cout<<endl<<"Szukany element nie istnieje"<<endl;
      break;
      return;
    }
    pozycja++;
  }
  cout<<endl<<"Szukany element o kluczu "<<k<<" znajduje sie na pozycji "<<pozycja<<endl;
}

void pokaz_pierwsze(int Y){
    element * wsk = lista.pierwszy;
    cout<<endl<<"Wartosci skladowych kluczowych pierwszych "<<Y<<" wezlow"<<endl;
    for(int i=0; i<=Y; i++){
        cout<<wsk->klucz<<endl;
        wsk=wsk->nastepny;
    }
}

void pokaz_ostatnie(int Z){
      element * wsk = lista.ostatni;
    cout<<endl<<"Wartosci skladowych kluczowych ostatnich "<<Z<<" wezlow"<<endl;
    for(int i=0; i<=Z; i++){
        cout<<wsk->klucz<<endl;
        wsk=wsk->poprzedni;
    }
}

void usun(int k){
    element*wsk = lista.pierwszy;
    for(int i=0; i<=licznik; i++){
        if(wsk->klucz == k){//jezeli znaleziono element o poszukiwanym kluczu
            if(wsk->klucz == lista.pierwszy->klucz){
                lista.ostatni->nastepny=wsk->nastepny;
                lista.pierwszy->nastepny->poprzedni = lista.ostatni;
                wsk->nastepny = lista.pierwszy;
                delete wsk;
                licznik--;
                break;
            }
            if(wsk->klucz == lista.ostatni->klucz){
                wsk->poprzedni->nastepny=lista.pierwszy;
                lista.pierwszy->poprzedni=wsk->poprzedni;
                wsk->poprzedni = lista.ostatni;
                delete wsk;
                licznik--;
                break;
            }
            else {
                wsk->nastepny->poprzedni=wsk->poprzedni;
                wsk->poprzedni->nastepny = wsk->nastepny;
                delete wsk;
                licznik--;
                break;
            }
        }
        else{//jezeli nie znaleziono porownania
            cout<<endl<<"Nie mozna usunac elementu. Element o szukanym kluczu nie istnieje"<<endl;
            break;
        }
        wsk=wsk->nastepny;
    }
}

void usun_wszystko(){
    cout<<endl<<"Usuwanie wszystkich elementow..."<<endl;
    element*wsk = lista.pierwszy;
    element*wsk2=wsk->nastepny;
    while(wsk->nastepny!=lista.ostatni){
        delete wsk;
        wsk=wsk2;
        licznik--;
    }
delete wsk2;
licznik--;
cout<<endl<<"Liczba elementow po usunieciu: "<<licznik<<endl;
}

int main()
{
    clock_t begin, end;
    double time_spent;
    begin = clock();

    srand(time(NULL));
    wyszukaj(k1);




    end = clock();
    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    return 0;
}

 

komentarz zamknięcia: Problem rozwiązany

Podobne pytania

0 głosów
1 odpowiedź 1,504 wizyt
pytanie zadane 17 września 2016 w C i C++ przez Unidentified Początkujący (260 p.)
+1 głos
0 odpowiedzi 95 wizyt
pytanie zadane 7 czerwca 2023 w Matematyka, fizyka, logika przez Konrad4142 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 478 wizyt
pytanie zadane 3 listopada 2019 w C i C++ przez Julka_99 Użytkownik (540 p.)

92,595 zapytań

141,444 odpowiedzi

319,717 komentarzy

61,980 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...