Πρόβλημα στη C...

Διδάσκοντες: Α. Καράκος, Αν. Καθηγητής

Re: Πρόβλημα στη C...

Δημοσίευσηαπό aek_21 » 25 Μάιος 2009, 15:30

Παιδιά κάποιος που είχε κάνει από το κεφάλαιο 6(επεξεργασία αρχείων) τις ασκήσεις 4 και 5,αν μπορεί να ανεβάσεις τους κώδικες των λυσεών τους...Ευχαριστώ...
aek_21
Newbie
 
Δημοσιεύσεις: 32
Εγγραφή: 22 Ιαν 2009, 12:23

Re: Πρόβλημα στη C...

Δημοσίευσηαπό Seitjo90 » 26 Μάιος 2009, 00:16

μια μορφή της άσκησης 5
το αρχείο ανοίγει στον κώδικα και όχι μέσω παραμέτρου στη main
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
/*
kanw xrisi kwdia ASCII opws vrethike sti selida
http://www.ascii.cl/
*/
main()
{
    FILE *fp;
    char ch;
    //metavliti gia ton xaraktira pou diavazw
    int xar_plithos;
    int lekseis;
    int pin[54];
    //lekseis---> plithos twn lexewn
    //pin[54]---->vazw ta dedomena apo ton elegxo
    int j;
    j=0;
    lekseis=0;
    xar_plithos=0;
    fp=fopen("keimeno.txt","r");
    if(fp==NULL)
    {
        printf("Δεν μπορώ ν’ ανοίξω το αρχείο \n");
        exit (1);
    }
    while ((ch = fgetc(fp)) != EOF)
    {
        if (ch == EOF)
        {
            break;
        }
        //auxisi tou plithos xaraktirwn
        xar_plithos++;
        //ean thelw na emfanizw to keimeno
        //vazw tin entoli : printf("%c",ch);
        //elegxos gia simeio sti3is opote auxisi kai twn lexewn
        if((ch==32)||(ch==33)||(ch==44)||(ch==46)||(ch==59)||(ch=='\n'))
        {
            lekseis=lekseis+1;
        }
        //elegxos gia ta kefalaia
        for(j=0;j<26;j++)
        {
            if(j==ch-65)
            {
                pin[j]=pin[j]+1;
                break;
            }
        }
        //elegxos gia peza grammata
        for(j=26;j<52;j++)
        {
            if(j==ch-71)
            {
                pin[j]=pin[j]+1;
                break;
            }
        }
        //elegxos gia keno
        if(ch==32)
        {
            pin[52]=pin[52]+1;
        }
        //elegxos gia alla simeia sti3is
        if(((ch>=33)&&(ch<=64))||((ch>=91)&&(ch<=96))||(ch>=122))
        {
            pin[53]=pin[53]+1;
        }
    }
    //kleisimo arxeiou
    fclose(fp);
    //emfinisi apotelesmatwn
    printf("\n\n\nΑποτελέσματα Επεξεργασίας \n");
    printf("To arxeio periexei \n");
    printf("\t %d λέξεις \n",lekseis);
    printf("\t %d χαρακτήρες \n",xar_plithos);
    printf("Anlytikotera \n");
    printf("\t%d το κενό \n",pin[52]);
    for(j=0;j<26;j++)
    {
        //emfanizei mono osa kefalaia grammata periexontai sto keimeno
        if(pin[j]==0)
        {
            continue;
        }
        printf("\t%d fores ton xaraktira %c\n",pin[j],j+65);
    }
    for(j=26;j<52;j++)
    {
        //emfanizei mono osa peza grammata periexontai sto keimeno
        if(pin[j]==0)
        {
            continue;
        }
        printf("\t%d fores ton xaraktira %c\n",pin[j],j+71);
    }
    printf("\t%d fores alloi xaraktires \n",pin[53]);
    printf(" \t\t\t **** TELOS ****");
}
Some people want it to happen, some wish it would happen, and others make it happen - Michael Jordan
Άβαταρ μέλους
Seitjo90
Γενικός Συντονιστής
 
Δημοσιεύσεις: 1983
Εγγραφή: 10 Νοέμ 2008, 19:24
Τοποθεσία: Dublin, Ireland
Φοιτητής ΗΜΜΥ: Όχι

Re: Πρόβλημα στη C...

Δημοσίευσηαπό Seitjo90 » 26 Μάιος 2009, 00:50

η άσκηση 4 με χρήση της malloc
θεωρώ μια πιο γενική περίπτωση(όταν δεν γνωρίζω το πλήθος των εγγραφών)
οπότε διαβάζω μια φορά το έγγραφο και βρίσκω το πλήθος τους.
έπειτα δεσμεύω την κατάλληλη περιοχή μνήμης για τον πίνακά μου
ακολουθεί ένα τυπικό bubble sort
και τέλος αποθήκευση στο νέο αρχείο
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0


main()
{
    void bubble(float *a, int sz);
    void swap(float *a1,float *b1);
    FILE *fp1,*fp2;
    int i,sz = 0;
    float *ar;
    float num;
    fp1=fopen("new2_data17.txt","r");
    fp2=fopen("final1.txt","w");
    if(fp1==NULL)
    {
        printf("Δεν μπορώ ν’ ανοίξω το αρχείο \n");
        exit (1);
    }
    if(fp2==NULL)
    {
        printf("Δεν μπορώ ν’ ανοίξω το αρχείο \n");
        exit (1);
    }
   
    //thelw na vrw ton arithmo twn eggrafwn pou exw
    while(!feof(fp1))
    {
        fscanf(fp1,"%f\n", &num);
        sz++;
    }
    printf("\nSize : %d \n", sz);
    fclose(fp1);
    //dhmioyrgw pinaka me vasi to megethos tou arxeiou
    ar = malloc(sz * sizeof(float));

    //Απόδοση περιεχομένου αρχείου στον πίνακα
    fp1=fopen("new2_data17.txt","r");
    do
    { //feof : Επιστρέφει μή μηδενική τιμή όταν συναντήσει το τέλος του
        for (i = 0; i < sz; i++)
        {
            fscanf(fp1, "%f\n", &ar[i]);
            //printf("%f ",ar);
        }
    }while((fscanf(fp1,"%f",&num))!=EOF);
    fclose(fp1);
    //for(i = 0; i < sz; i++)
    {
       // printf("%.1f\n", ar[i]);
    }
    bubble(ar,sz);

    for(i = 0; i < sz; i++)
    {
        fprintf(fp2, "%.1f\n", ar[i]);
    }
    fclose(fp2);
    return 0;
}

//Ανταλλαγή

void swap(float *a1,float *b1)
{
float temp;
temp = *a1;
*a1 = *b1;
*b1 = temp;
}


//Bubble Sort
void bubble(float *a, int sz)
{
    int i, done = FALSE;
    while(!done)
    {
        sz--;
        done = TRUE;
        for (i = 0; i < sz; i++)
        {
            if (a[i] < a[i + 1])
            {
                swap(&a[i], &a[i+1]);
                done = FALSE;
            }
        }
    }
}


ανοικτός σε τυχόν απορίες και σχόλια
Some people want it to happen, some wish it would happen, and others make it happen - Michael Jordan
Άβαταρ μέλους
Seitjo90
Γενικός Συντονιστής
 
Δημοσιεύσεις: 1983
Εγγραφή: 10 Νοέμ 2008, 19:24
Τοποθεσία: Dublin, Ireland
Φοιτητής ΗΜΜΥ: Όχι

Προηγούμενη

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης

cron