giannis-21 Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 παιδες γεια σας! εχω μια ασκηση παλι και θελει ο τυπας να βρουμε το ποσοστο των γραμματων μεσα σε ενα αρχειο.τι πρωτο που μου ηρθε στο μυαλο ηταν με counters αλλα ειναι πολυ απλο νομιζω. καμια αλλη ιδεα μηπως? εφτιαξα αυτον τον οδικα σημερα αλλα δεν δουλευει μετα απο ενα σημειο στο αρχειο..μου βγαζει οτι γραμματα θελει.. #include <stdio.h>#include <string.h> #include <ctype.h> void lowercase(char string[]) { int i = 0; while ( string ) { string = tolower(string); i++; } } int main() { int i,j,size,periptwsh,cnt=-1,trexousa_thesh,metrhths=0; char pinakas[26],ch,tarxeio[50]; FILE *filep; /* declare a FILE pointer */ printf("ginete i anagnosi tou arxeiou.\n"); filep=fopen("data.txt", "r"); /* open a text file for reading */ if(filep==NULL) { printf("Error: can't open file.\n"); /* fclose(file); DON'T PASS A NULL POINTER TO fclose !! */ return 1; } else { while(!feof(filep)) { ch=fgetc(filep); cnt++; } fseek(filep,0,0); printf("h leksh poy briskete sto arxeio einai h:\n\n"); printf("%d\n",cnt); for(i=0;i<26;i++){ pinakas= 0; } fscanf(filep,"%s",&tarxeio); lowercase(tarxeio); for(i=0;i<cnt;i++) { for (j=97;j<=122;j++){ if (tarxeio==j){ pinakas[j-97]=pinakas[j-97]+1; metrhths++; printf("%c ",tarxeio); } } } for(i=0;i<26;i++){ if(pinakas>0) printf("%c: %d me pososto %.2f\n",(char)(i+97),pinakas,(float)pinakas/metrhths*100); } } return 0; }
pinball_elf Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 Ιδέα: Διάβασε το αρχείο παίρνοντας ένα χαρακτήρα την φορά. Φύλαξε το πλήθος των χαρακτήρων σε μία μεταβλητή "int total_chars". Επιπλέον κάθε φορά που διαβάζεις ένα χαρακτήρα θα ελέγχεις εάν είναι γράμμα (tip: int isalpha (int c)), τότε θα αυξάνεις μια άλλη μεταβλητή "int total_letters". Το ποσοστό των γραμμάτων είναι: (total_letters / total_chars) * 100. Ελπίζω να βοήθησα.
georgemarios Δημοσ. 24 Μαρτίου 2009 Δημοσ. 24 Μαρτίου 2009 Εκτος και αν εννοεις τι ποσοστο εμφανισης εχει ο χαρακτηρας 'α', τι ποσοστο ο 'b' κτλ Σε αυτη τη περιπτωση θελεις ενα counter variable για καθε χαρακτηρα που θελεις να μετρησεις. Στο τελος κανεις τη σουμα των counters και βγαζεις ποσοστα.
giannis-21 Δημοσ. 24 Μαρτίου 2009 Μέλος Δημοσ. 24 Μαρτίου 2009 Ιδέα: Διάβασε το αρχείο παίρνοντας ένα χαρακτήρα την φορά. Φύλαξε το πλήθος των χαρακτήρων σε μία μεταβλητή "int total_chars". Επιπλέον κάθε φορά που διαβάζεις ένα χαρακτήρα θα ελέγχεις εάν είναι γράμμα (tip: int isalpha (int c)), τότε θα αυξάνεις μια άλλη μεταβλητή "int total_letters". Το ποσοστό των γραμμάτων είναι: (total_letters / total_chars) * 100. Ελπίζω να βοήθησα. με βοηθησες αρκετα διοτι ειχα προβλιμα με τα κενα και τους ειδικους χαρακτηρες και τωρα με το isalpha,isblunk,isspace θα το φτιαξω μαλλον να ειστε καλα και οι 2 που απαντησατε
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.