Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Fire/SOUL/CD
    félisten

    #include <stdio.h>
    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused
    int main( int argc, char* argv[] )
    {
    int i;
    FILE* f;
    FILE *fp;
    int count[256];

    for(i=0; i<256; i++)
    {
    count[i] = 0;
    }

    f = fopen("input.txt", "rt");

    while(1)
    {
    int c = fgetc(f);
    if( c==EOF )
    break;
    if( c<0 || c>255 ) {
    printf("hiba: nem vart betu");
    return 3;
    }

    count[c] += 1;
    }

    fclose(f);

    printf("gyakorisagok:\n");
    for(i=0; i<256; i++)
    {
    if( count[i] < 1 )
    continue;

    printf("'%c': %d-szer\n", i, count[i]);
    fp=fopen("output.txt", "a+");
    fprintf(fp,"Gyakorisága az");
    fprintf(fp,"%c betunek %d\n", i, count[i]);
    fclose(fp);
    }
    system("pause");
    return 0;
    }

    Mit gondoltok ez így jó?
    Nem lehetne vhogy egyszerűbben megcsinálni?
    BabyAniGirl

    Hali!

    Na csak meg lett. Olyan kód volt a forrásba, amit a PH is használ formázásra...

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

    //ha többször használod ugyanazt az értket, akkor azt célszerű így definiálni
    //így megelőzhető az elgépelésekből adodó hibák
    #define MAXCHAR 256

    int CharCounter[MAXCHAR];

    int main()
    {
    int i;
    //a karakterek(így a betűk, számok, stb) egy byte-on tárolódnak az értékük 0-255 lehet
    //ezért nem int típust, hanem unsigned char típust deklarálunk
    unsigned char ch;
    FILE * TextFileAsBinary;
    FILE * OutputTextFile;

    printf("Karakter-szamlalo\n\n");

    //kinullázzuk a tömbünket. ez azonban jelen esetben teljesen felesleges
    //mivel a fórdító automatikusan elvégzi ezt a feladatot. Természetesen ha
    //többször kellene használni a tömböt, akkor szükséges lehet az "újranullázás"
    for (i=0;i<MAXCHAR;CharCounter[i++]=0);

    //minden fájl megnyitásakor kötelező a hibaellenőrzés!
    if (!(TextFileAsBinary = fopen("input.txt","rb"))) {
    fprintf(stderr,"Nem lehet megnyitni a fajlt...");
    exit(-1);
    }
    //az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be ch-be
    //a korábban megnyitott "input.txt" fájlból
    //a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
    //jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
    //vagy valamilyen fájlolvasási hiba lépett fel
    while (fread(&ch,1,1,TextFileAsBinary)==1) CharCounter[ch]++;
    fclose(TextFileAsBinary);

    //kimeneti fájl megnyitása, mindig kérdés nélkül felülírodik!
    if (!(OutputTextFile = fopen("output.txt","wt"))) {
    fprintf(stderr,"Nem lehet irni a fajlt...");
    exit(-1);
    }
    //itt azért 16-ról indítom a ciklust, mert ez alatt többnyire karakteres vezérlőkódok
    //találhatók(return, tab, sipolás, visszatörlés stb), amikor ezeket beleírnád a fájlba
    //akkor furcsán mutatna
    for (i=16;i<MAXCHAR;i++) {
    //csak akkor írok fájlba, ha előfordult az 'i' karakter, ha nem akkor felesleges
    if (CharCounter[i]) {
    fprintf(OutputTextFile,"Gyakorisága a(z) %c karakternek: %d\n",i,CharCounter[i]);
    }
    }
    fclose(OutputTextFile);

    return 0;
    }

    Fire.

  • Fire/SOUL/CD
    félisten

    #include <stdio.h>
    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused
    int main( int argc, char* argv[] )
    {
    int i;
    FILE* f;
    FILE *fp;
    int count[256];

    for(i=0; i<256; i++)
    {
    count[i] = 0;
    }

    f = fopen("input.txt", "rt");

    while(1)
    {
    int c = fgetc(f);
    if( c==EOF )
    break;
    if( c<0 || c>255 ) {
    printf("hiba: nem vart betu");
    return 3;
    }

    count[c] += 1;
    }

    fclose(f);

    printf("gyakorisagok:\n");
    for(i=0; i<256; i++)
    {
    if( count[i] < 1 )
    continue;

    printf("'%c': %d-szer\n", i, count[i]);
    fp=fopen("output.txt", "a+");
    fprintf(fp,"Gyakorisága az");
    fprintf(fp,"%c betunek %d\n", i, count[i]);
    fclose(fp);
    }
    system("pause");
    return 0;
    }

    Mit gondoltok ez így jó?
    Nem lehetne vhogy egyszerűbben megcsinálni?
    BabyAniGirl

    Hali!

    Jó pár hozzáfűzni valóm lett volna, ezért inkább megírtam és a kommentekben elolvashatod.

    Ha valami nem érthető, vagy más kérdésed is lenne, akkor nyugodtan írj, ahogy időm engedi válaszolok. (meg biztosan mások is)

    Bocs de nem tudom berakni a kódot csak valami maszat lesz, még próbálkozom.

    Fire.

Új hozzászólás Aktív témák