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

Implementacja listy (z wykorzystaniem biblioteki STL)

Object Storage Arubacloud
0 głosów
505 wizyt
pytanie zadane 29 maja 2019 w C i C++ przez BezBarwny Użytkownik (700 p.)

Witam,
Dostałem ponizsze zadanie do wykonania, niestety mam problem z zaimplementowaniem w kodzie Listy, przy wykorzystaniu biblioteki STL będę wdzieczny za wszelką pomoc.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char *p1=NULL;  //wskoaźnik/tabela 1
char *p2=NULL; //wskaźnik 2
char *p3=NULL; //itd.


//----------Zliczanie ile jest liczb i sprawdzanie czy to tylko liczby
int zliczanie(char* nazwa){ //funkcja zliczająca ilość cyfr w pliku
    FILE *plik=NULL;
    if((plik=fopen(nazwa,"rb"))==NULL){ //otwieranie  sprawdzanie czy taki plik istnieje
        printf("Brak pliku wejsciowego o podanej nazwie");
        return -1;
    }
    unsigned char buffor[1];  //buffor do chwilowego przechwytywania liczb
    int licznik=0;
    while((fread(buffor,sizeof(unsigned char),1 ,plik))==1){
        licznik+=  1;
        if(*buffor<'0'||*buffor>'9'){ //sprawdzaine czy plik zawiera tylko liczby
        printf("Dzialanie nie zostanie wykonane, plik nie zawiera liczby");
        return -1; //jesli jest cos zle to zwraca -1
        }
    }
    return licznik;
}
//-----tworzenie tabeli do przechwytywania z pliku, cyfry zapisuja sie od konca----------
void tworzenie_tabeli(char* nazwa,int x,int a){
    FILE *plik=NULL;
    if((plik=fopen(nazwa,"rt"))==NULL){ //znowu otwieranie pliku ze sprawdzeniem
        printf("Brak pliku wejsciowego o podanej nazwie");
    }
    char tab[x]; //tabela d przechwytywania
    p1=(char*)malloc(x*sizeof(char)); //alokowanie pamieci dla tabeli
    int i;
    for(i=0;i<a;i++){
        fseek(plik, -(i+1), 2); //cyfry pobieraie od konca
        *(tab+i)=fgetc(plik); //przechwytywanie do tabeli
        *(tab+i)-=48; //pobranie liczby s w kodzie ASCII wiec trzeba odjac 48 (zero to 48)
    }
    for(i=a;i<x;i++){ //reszta jest wypełniania zerami
        *(tab+i)=0;
    }
    for(i=0;i<x;i++){ //funkcja pomocnicza do srawdzenie poprawnego zapisu
        printf("tab+%d=%d\n",i,*(tab+i));
    }

    strcpy(p1,tab); //przepisywanie z tablei do tabeli...inaczej wywala bład

}

//-----To jest stos, algorytm pierwotnie zadany do zrobienia----

int stos(int x,char* p3,char* p2, char* nazwa){
    int i=0;
    int stos[x]; //tabela - stos
    int przenies=0;
    for(i=0;i<x;i++){
        printf("%d  ",p3[i]);//pomocniczo wyswietla
        printf("%d\n",p2[i]);//pomocniczo wyswietla czy wszystko okey
        //printf("%d\n",przenies);
        stos[i]=p3[i]+p2[i]+przenies; //suma cyfr z dwóch tabel i ewentualnego przenienienia
        if(stos[i]>=10){ //jesli byloby przeniesienie, czyli suma cyfr >=10
            stos[i]-=10;//aby zostały same jednostki
            przenies=1;// czy dodawaniu dwóch cyf maksymalni przeniesienie wynosi 1
        }
        else
            przenies=0;//jesli suma cyfr nie jest >=10
    }

    //-------Wyswietlanie: POP (usuwanie elementówod ostatnio dodanego) ze Stosu------------------
    FILE *plik=NULL;
    if((plik=fopen(nazwa,"wt"))==NULL){ //otwieranie pliku do ktorego jest zapisywany wynik
        printf("Brak pliku wejsciowego o podanej nazwie");
        return 0;
    }
    for(i=(x-1);i>=0;i--){ //zapisywanie o tyłu tabeli, 
        fprintf(plik,"%d",stos[i]);
       printf("%d",stos[i]);
   }
    return 0;
}




int main() { //stos= last in, first out
    char *nazwa1="D://WE1.txt";
    char *nazwa2="D://WE2.txt";
    char *nazwa3="D://WY1.txt";
    //--------------TABLICA-----------------------
    int a=zliczanie(nazwa1);//zliczanie WE1
    if(a==-1)
        return -1;
    int b=zliczanie(nazwa2); //zlizanie WE2
    if(b==-1)
        return -1;
    int z=(a>b)?a:b; //jezeli a>b to z=a w przeciwnym prypadku z=b
    z+=1; //bo rzad dodawania moze byc o jeden wiekszy niz najdłuższa liczba
    tworzenie_tabeli(nazwa1,z, a); //tworzenie tabeli1
    p3=(char*)malloc(z*sizeof(char));
    strcpy(p3,p1);
    tworzenie_tabeli(nazwa2,z,b); //tworzenie tabeli2
    p2=(char*)malloc(z*sizeof(char));
    strcpy(p2,p1);
    int c=(a>b)? (p2[(z-1)])=0: (p3[(z-1)]=0); //to musiała zrobic zeby byly wszyskie zera na końcu
    int p=stos(z,p3,p2,nazwa3);
    if(p==-1)
        return -1;
    return 0;
}


Zaprojektuj algorytm i napisz program, który umożliwia dodawanie dowolnie dużych liczb przy wykorzystaniu struktury stosu.
Stos zaimplementuj jako Tablice
Stos zaimplementuj jako Liste (biblioteka STL)

Dane wejściowe:
Plik nazwie WE1.TXT zawierający pierwszy składnik.
Plik nazwieWE2.TXT zawierający drugi składnik.

komentarz 29 maja 2019 przez Dawid Markiewicz Obywatel (1,590 p.)
masz zaimplementowac liste jako stos biblioteki stl czy zaimplementowac liste z biblioteki stl jesli tak to wystarczy dodac #include <list> i masz liste w programie poza tym nie dodawaj tak kodu nikomu nie bedzie sie chcialo go calego przegladac wstawiaj tylko fragment z ktorym masz problem (sorry za orto)
komentarz 29 maja 2019 przez BezBarwny Użytkownik (700 p.)
stos zaimplementowac jako liste z wykorzystaniem biblioteki STL
komentarz 2 czerwca 2019 przez Dawid Markiewicz Obywatel (1,590 p.)
oczekujesz teraz ze zrobimy za ciebie to zadanie? wklej fragment kodu z ktorym masz problem to mozemy ci cos doradzic a nie robic cale zadanie za ciebie
komentarz 8 czerwca 2019 przez BezBarwny Użytkownik (700 p.)
wręcz przeciwnie nie oczekuje ze ktokolwiek zrobi to za mnie myślałem ze wyżej napisałem o co mi chodzi "niestety mam problem z zaimplementowaniem w kodzie Listy, przy wykorzystaniu biblioteki STL" a samo zadanie wkleiłem by dokładnie było widac co mam zrobic wkleiłem czesc zadania którą miałem a prosiłem pomoc w zaimplementowaniu tablicy wyjasnieniu jak to zrobic i jak to działa wiec nie wiem jaki fragment kodu miałbym wkleic skoro implementacją zaczyna sie zadanie miałem wkleic same biblioteki?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 422 wizyt
pytanie zadane 23 czerwca 2018 w C i C++ przez Asokus Początkujący (450 p.)
0 głosów
1 odpowiedź 466 wizyt
pytanie zadane 8 maja 2020 w C i C++ przez Dyali56 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 444 wizyt
pytanie zadane 4 maja 2016 w C i C++ przez KlejnotNilu Użytkownik (750 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...