- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Gaming notebook topik
- Épített vízhűtés (nem kompakt) topic
- 3D nyomtatás
- Apple notebookok
- Házimozi haladó szinten
- Modern monitorokra köthető 3dfx Voodoo kártya a fészerből
- VR topik (Oculus Rift, stb.)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Azonnali informatikai kérdések órája
Hirdetés
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Új Beats fej- és fülhallgatók jelentek meg
ma Frissítette a Solo termékcsaládot az Apple házi audiomárkája.
-
Dragon Ball: Sparking! Zero - Mester és tanítvány
gp Egyelőre még mindig nem kaptunk megjelenési dátumot a játékhoz.
Új hozzászólás Aktív témák
-
blaces
tag
Hali!
Így csináltam meg a házim:
A feladat:[I]Írj programot, amely kiszámítja, hogy két szöveges állomány szóhasználata mennyire hasonló! A hasonlóságot egy 0 és 1 közé eső törtszámmal mérjük. Kiszámítása a következőképpen történik: minden szóra, ami legalább az egyik állományban előfordul, vesszük a szó gyakoriságát az első fájlban és a másodikban. A két gyakoriságot kivonjuk egymásból, majd a különbség abszolútértékét elosztjuk a szó összes előfordulásának számával (gyakoriság_az_első_fájlban + gyakoriság_a_második_fájlban). Ezt a számítást elvégezzük minden szóra. Az szavakra kiszámított értékeket végül összeadjuk, és elosztjuk a két állományban előforduló különböző szavak számával.A szöveges állományok nevét a program parancssori argumentumként kapja meg. Az állományok minden sora legfeljebb 1000 karakter hosszú. A sorokban a szavak szóközzel, vesszővel, felkiáltójellel, kérdőjellel és ponttal lehetnek elválasztva. A kis- és nagybetűket azonosként kell kezelni. Az állományok szavai közül csak azokat kell figyelembe venni, amelyek három vagy több karakterből állnak. Minden szó csak az angol ábécé kis- és nagybetűit tartalmazhatja.
A program a kiszámított értéket írja a kimenetre 5 tizedesjegy pontossággal![/I]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define IGAZ 1
#define HAMIS !IGAZ
typedef struct listaelem{
char szo[50];
struct listaelem *kov;
}LISTAELEM;
int abszolut(int a,int b)
{ int c;
c=(a-b)>=0 ? (a-b):(a-b)*(-1);
return c;
}
int keres(LISTAELEM *fej,char sz[])
{
LISTAELEM *seged;
for(seged=fej;seged;seged=seged->kov)
{
if(strcmp(sz,seged->szo)!=0)
return IGAZ;
}
return HAMIS;
}
LISTAELEM* beszur(LISTAELEM *fej,char szo[])
{
LISTAELEM *ujelem=(LISTAELEM*)malloc(sizeof(LISTAELEM));
strcpy(ujelem->szo,szo);
ujelem->kov=NULL;
if(!fej)
return ujelem;
else
{
LISTAELEM *seg=fej;
while(!seg->kov)
seg=seg->kov;
seg->kov=ujelem;
}
return fej;
}
LISTAELEM* feldolgoz(FILE *f,LISTAELEM *fej)
{
char betu,sz[50];
int j,i=0;
while( (betu=fgetc(f)) !=EOF)
{
if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
{
if(strlen(sz)>2)
{
fej=beszur(fej,sz);
for(j=0;j<50;j++)
sz[j]=' ';
i=0;
}
}
else
{
sz[i]=tolower(betu);
i++;
}
}
return fej;
}
int gyak(LISTAELEM *fej,char sz[])
{
LISTAELEM *seg;
int gyakorisag=0;
for(seg=fej;seg;seg=seg->kov)
{
if(strcmp(seg->szo,sz)==0)
gyakorisag++;
}
return gyakorisag;
}
int main(int argc,char **argv)
{
FILE *f1,*f2;
LISTAELEM *fej1,*fej2,*fej3,*seged;
int gyak1,gyak2,szavak=0,n;
float hasonlosag=0,eredm;
f1=fopen(argv[1],"r");
f2=fopen(argv[2],"r");
fej1=feldolgoz(f1,fej1);
fej2=feldolgoz(f2,fej2);
for(seged=fej1;seged;seged=seged->kov)
{
if((n=keres(fej3,seged->szo))==0)
{
gyak1=gyak(fej1,seged->szo);
gyak2=gyak(fej2,seged->szo);
hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
szavak++;
}
}
for(seged=fej2;seged;seged=seged->kov)
{
if((n=keres(fej3,seged->szo))==0)
{
gyak1=gyak(fej1,seged->szo);
gyak2=gyak(fej2,seged->szo);
hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
szavak++;
}
}
eredm=hasonlosag/szavak;
printf("%.5f\n",eredm);
return 0;
}De lefordításkor ilyen szegmens hibát ír ki:
Szegmens hiba
A debug.out fájlban nyomkövetési információk érhetőek el.
A teszt_debug.out fájlban a nyomkövetés során előállt kimenet található!
Érvenytelen memória hivatkozás.debug tartalma:
==21624== Conditional jump or move depends on uninitialised value(s)
==21624== at 0x40079A: feldolgoz (1_feladat.c:57)
==21624== by 0x4008C3: main (1_feladat.c:95)
==21624==
==21624== Conditional jump or move depends on uninitialised value(s)
==21624== at 0x4A1CD9E: strcpy (mc_replace_strmem.c:272)
==21624== by 0x4006E5: beszur (1_feladat.c:35)
==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
==21624== by 0x4008C3: main (1_feladat.c:95)
==21624==
==21624== Conditional jump or move depends on uninitialised value(s)
==21624== at 0x4006F7: beszur (1_feladat.c:37)
==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
==21624== by 0x4008C3: main (1_feladat.c:95)
==21624==
==21624== Invalid read of size 8
==21624== at 0x40071D: beszur (1_feladat.c:42)
==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
==21624== by 0x4008C3: main (1_feladat.c:95)
==21624== Address 0x38 is not stack'd, malloc'd or (recently) free'd
==21624==
==21624== Process terminating with default action of signal 11 (SIGSEGV)
==21624== Access not within mapped region at address 0x38
==21624== at 0x40071D: beszur (1_feladat.c:42)
==21624== by 0x4007B7: feldolgoz (1_feladat.c:59)
==21624== by 0x4008C3: main (1_feladat.c:95)Ez meg egy másik házinak a kódja, de itt is ugyanaz a hiba, érvénytelen memória hivatkozás:
#include <stdio.h>
#include <stdlib.h>
typedef struct faelem{
int adat;
struct faelem *bal,*jobb;
}FA;
typedef struct listaelem{
int adat;
struct listaelem *kov;
}LISTA;
LISTA* beszur_lista(LISTA *fej,int adat)
{
LISTA *ujelem=(LISTA*)malloc(sizeof(LISTA));
ujelem->adat=adat;
ujelem->kov=NULL;
if(!fej)
return ujelem;
else
{
LISTA *segb=fej;
while(!segb->kov)
segb=segb->kov;
segb->kov=ujelem;
}
return fej;
}
FA *ujelem(){
FA *uj = (FA *)malloc(sizeof(FA));
uj -> bal = NULL;
uj -> jobb = NULL;
return uj;
}
FA *beszur_fa(FA *gyoker, int adat){
FA *uj;
if(gyoker == NULL)
{
uj = ujelem();
uj -> adat = adat;
gyoker = uj;
}
else if(adat <= gyoker -> adat)
gyoker -> bal =beszur_fa(gyoker -> bal, adat);
else if(adat > gyoker -> adat)
gyoker -> jobb =beszur_fa(gyoker -> jobb, adat);
return gyoker;
}
int elemszam(FA *fa)
{
return fa ? 1+elemszam(fa->bal)+elemszam(fa->jobb) : 0;
}
LISTA* preorder(FA *fa,LISTA *fej1)
{ if(fa)
{
fej1=beszur_lista(fej1,fa->adat);
preorder(fa->bal,fej1);
preorder(fa->jobb,fej1);
}
return fej1;
}
LISTA* inorder(FA *fa,LISTA *fej2)
{
if(fa)
{
inorder(fa->bal,fej2);
fej2=beszur_lista(fej2,fa->adat);
inorder(fa->jobb,fej2);
}
return fej2;
}
int hasonlit(LISTA *fej1,LISTA *fej2)
{
LISTA *seged1,*seged2;
seged1=fej1;
seged2=fej2;
while(seged1)
{
if(seged1->adat!=seged2->adat)
goto c;
seged1=seged1->kov;
seged2=seged2->kov;
}
c:return 1;
return 0;
}
int main(int argc,char **argv)
{
int szam,i;
FILE *f,*ki;
FA *forras;
LISTA *in,*pre;
f=fopen(argv[1],"r");
ki=fopen(argv[2],"w");
fscanf(f,"%d\n",&szam);
forras=beszur_fa(forras,szam);
while(szam!=EOF)
{
fscanf(f,"%d\n",&szam);
forras=beszur_fa(forras,szam);
}
in=inorder(forras,in);
pre=preorder(forras,pre);
i=hasonlit(pre,in);
if(i==1)
fprintf(ki,"nem\n");
else fprintf(ki,"igen\n");
fclose(f);
fclose(ki);
return 0;
}A CodeBlocks nem talál hibákat, és az egyik C ismerősöm sem érti, hogy mi a gond...
Ú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!
- Kerékpárosok, bringások ide!
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Xiaomi AX3600 WiFi 6 AIoT Router
- gban: Ingyen kellene, de tegnapra
- Redmi Note 12 Pro - nem tolták túl
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Alkoholista nevelde
- Mobil flották
- Kávé kezdőknek - amatőr koffeinisták anonim klubja
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- HP ProBook 430 G6, 13,3" FULL HD IPS, I5-8265U, 8GB DDR4, 256GB SSD, WIN 10/11, SZÁMLA, GARANCIA
- Dell Latitude 3420, 14" FULL HD IPS, I5-1145G7 CPU, 8GB DDR4, 256GB SSD, W11, Számla, Garancia
- Dell Latitude 7280, 12,5" FHD IPS Kijelző, I5-6300U, 8GB DDR4, 256GB SSD, WIN 10, Számla, garancia
- Lenovo ThinkPad X280, 12,5" HD Kijelző, I5-8250U CPU, 8GB DDR4, 256GB SSD, WIN 10/11, Számla, Garanc
- Lenovo ThinkPad L490, 14" FHD IPS Kijelző, I5-8265U CPU, 8GB DDR4, 256GB SSD, WIN 10/11, Számla, Gar