Hirdetés
- Intel Core i7-5xxx "Haswell-E/EP" és i7-6xxx "Broadwell-E/EP" (LGA2011-v3)
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- A Sony szerint a PlayStation 5 konzolokat még nem érinti a memóriahiány
- Amlogic S905, S912 processzoros készülékek
- OLED TV topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Projektor topic
- Azonnali notebookos kérdések órája
- E-book olvasók
Új hozzászólás Aktív témák
-
blaces
tag
Közben a harmadikkal is foglalkozom... szinte egésznap, lehet a fáradtságtól nem tudok már oda figyelni rendesen.
Feladat:
[I]Írj programot, amely egy egész számokat tartalmazó szöveges állományból felépít egy bináris fát, és eldönti, hogy a fa inorder és preorder bejárásával ugyanazt a számsorozatot kapja-e! A számokat tartalmazó állomány nevét az első parancssori argumentumként kapja meg a program.A szöveges állomány soronként pontosan egy tízes számrendszerbeli egész számot tartalmaz. A sorokat az újsor karakter (\n) zárja. Az állományt az állomány vége (EOF) jelig kell olvasni.
A bináris fa felépítésében két szabályt kell figyelembe venni. Ha a beszúrandó szám nagyobb, mint az, amelyik a gyökérben van, akkor a gyökértől jobbra kerüljön, ha kisebb vagy egyenlő, akkor a gyökér bal oldalára. Azaz ez a fa nem bináris keresőfa.
A program járja be a fát inorder és preorder módon. Ha a két bejárás ugyanazt a számsorozatot adja eredményül, akkor a program a második parancssori argumentumként megkapott nevű állományba írja az "igen", különben a "nem" szót. [/I]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define HAMIS 0
#define IGAZ (!HAMIS)
typedef struct faelem {
char *adat;
int szamlalas, input;
struct faelem *bal, *jobb;
} FA;
void beszuras(FA **gyok, char *adat, int fajlnev) {
if(*gyok == NULL) {
*gyok = (FA*)malloc(sizeof(FA));
(*gyok)->adat = (char*)malloc((strlen(adat)+1)*sizeof(char));
strcpy((*gyok)->adat, adat);
(*gyok)->szamlalas = 1;
(*gyok)->input = fajlnev;
(*gyok)->bal = (*gyok)->jobb = NULL;
} else if(strcmp((*gyok)->adat, adat) < 0) {
beszuras(&(*gyok)->jobb, adat , fajlnev);
} else if(strcmp((*gyok)->adat, adat) > 0) {
beszuras(&(*gyok)->bal, adat, fajlnev);
} else if((strcmp((*gyok)->adat, adat) == 0) && ((*gyok)->input != fajlnev)) {
(*gyok)->szamlalas++;
(*gyok)->input = fajlnev;
}
return;
}
void bejaras(FA *gyok, int n) {
if(gyok != NULL) {
bejaras(gyok->bal, n);
if(gyok->szamlalas == n) {
printf("%s\n",gyok->adat);
}
bejaras(gyok->jobb, n);
}
return;
}
void torles(FA *gyok) {
if(gyok != NULL) {
free(gyok->adat);
torles(gyok->bal);
torles(gyok->jobb);
free(gyok);
}
return;
}
int atugras(int ch) {
if(ch != (int)' ' && ch != (int)'\n' && ch != (int)'\r' &&
ch != (int)'\t' && ch != (int)'.' && ch != (int)',' && ch != (int)';' &&
ch != (int)EOF) {
return HAMIS;
}
return IGAZ;
}
char *memoriafoglalas(char *szo, int j) {
return (szo == NULL) ?
(char*)malloc(sizeof(char)) : (char*)realloc(szo,(j+1)*sizeof(char));
}
int main(int argc, char **argv) {
FILE **fp = NULL;
char *szo = NULL;
int ch;
FA *gyok = NULL;
int i, j;
if((fp = (FILE**)malloc((argc-1)*sizeof(FILE*)))==NULL)
exit(1);
for(i=1;i<argc;++i)
if((fp[i-1] = fopen(argv[i],"rt+"))==NULL)
exit(1);
for(i=1;i<argc;++i) {
j = 0;
while((ch = fgetc(fp[i-1]))) {
if((szo = memoriafoglalas(szo, j))==NULL)
exit(1);
if(atugras(ch) == HAMIS) {
szo[j++] = tolower(ch);
} else if(j > 0 || ch == (int)EOF) {
szo[j] = '\0';
beszuras(&gyok, szo, i-1);
free(szo);
szo = NULL;
j = 0;
if(ch == (int)EOF) {
break;
}
}
}
fclose(fp[i-1]);
}
free(fp);
bejaras(gyok, argc-1);
torles(gyok);
return 0;
}Ez lefordul, csak hibás kimenetet ad vissza
az egyetemi tesztelőn
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- exHWSW - Értünk mindenhez IS
- Interactive Brokers társalgó
- Intel Core i7-5xxx "Haswell-E/EP" és i7-6xxx "Broadwell-E/EP" (LGA2011-v3)
- Disney+
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Különleges élményre invitál az Apple
- gban: Ingyen kellene, de tegnapra
- Revolut
- mefistofeles: Az elhízás nem akaratgyengeség!
- Elden Ring
- További aktív témák...
- ADATA (1x32GB) DDR5 4800MHz CL40 - 120 hó garancia
- Lenovo IdeaPad 3 - 15,6" Full HD - AMD Athlon Silver 3050U - 4GB - 512GB SSD - Win10 PRO - MAGYAR
- Patriot Viper Venom RGB 32GB KIT DDR5 6000MHz CL36 - XMP/EXPO - ÚJ-Bontatlan
- AMPAPA D1 Erősítő + Douk Audio Q11 DAC
- Komplett Gamer gép RX 5500 XT 8GB / 16GB RAM + AOC 60HZ monitor ingyen!
- BESZÁMÍTÁS! ASRock H510M i5 11400F 16GB DDR4 512GB SSD ASUS ROG RX VEGA64 8GB CM Masterbox 5 700W
- Telefon felvásárlás!! Xiaomi Redmi Note 13, Xiaomi Redmi Note 13 Pro, Xiaomi Redmi Note 13 Pro+
- Blackview Link 8 12,7" Tablet
- HIBÁTLAN iPhone 13 128GB Starlight -1 ÉV GARANCIA - Kártyafüggetlen, MS4421, 100% Akksi
- 1000 W HP DPS-800GB-A szerver tápegység
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest
az egyetemi tesztelőn

