Oppure

Loading
24/01/10 10:40
wicca89
Salve ragazzi vi prego aiutatemi con questo esercizio sui file :hail::hail: non riesco proprio a venirne a capo8-|:(

Esercizio 5 (max 7)
Sia dato un file testo auditel.txt. Le informazioni sono così strutturate: il primo rigo contiene il nome dell’emittente. Per ogni emittente, seguono due righe contenenti un orario e il tipo di trasmissione seguito dal carattere ‘|’ e dal numero di telespettatori. Scrivere una function che dato in input un orario, stampi il nome dell’emittente e il tipo di trasmissione che hanno ottenuto il maggior numero di telespettatori.

Input: 23
statistiche.txt
Rai 1<eoln>
21 Telefilm*3418<eoln>
23 Varieta’*984<eoln>
Rai 2<eoln>
21 Telefilm*2091<eoln>
23 Varieta’*865<eoln>
Rai 3<eoln>
21 Varieta’*1618<eoln>
23 Documentario*452<eoln>
Canale 5<eoln>
21 Telefilm*2362<eoln>
23 Film*994<eoln>
Italia 1<eoln>
21 Varieta’*2662<eoln>
23 Sport*804<eoln>
Rete 4<eoln>
21 Film*1207<eoln>
23 Film*663<eoln><eof>    


Output:
23 Canale 5 Film
aaa
24/01/10 10:42
nessuno
Hai provato a suddividere in piccoli problemi tutto l'esercizio?

E risolvere i piccoli problemi uno dopo l'altro?

Dove trovi difficoltà?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
24/01/10 10:48
wicca89
dello svolgimento in generale ho una mezza idea :
#include <stdio.h>
#include <string.h>



int main () {
    FILE *fp,*file;
    char stringa[256],a[256];
    int orario,i,n;
    char s;
    
    printf("Dammi un orario per sapere i programmi trasmessi: ");
    scanf("%d",&orario);
    
    fp=fopen("auditel.txt","r");
        
    if(fp!=NULL){
                 while(!feof(fp)) {
                                  fscanf(fp,"%s",stringa);
                                  for(i=0;i<256;i++) {
                                  if(i==orario) {
                                                printf("%s",stringa[i]);
                                                                }}
                           }
                           }
 
    fclose(fp);


Ma ovviamente non funziona :nono:
aaa
24/01/10 10:49
wicca89
vi prego aiutatemi se non fosse che domani ho l'esame di programmazione e qst è una traccia di un vecchio compito mi sarei applicata da sola :hail::hail:
aaa
24/01/10 11:45
nessuno
Probabilmente ci avresti dovuto pensare un po' prima ... se domani hai l'esame e non sai fare "al volo" questo tipo di compiti, allora la vedo male ...

Comunque, anche se scritto velocemente (probabilmente da correggere da qualche parte e da ottimizzare), prendi spunto da questo codice ...

#include <stdio.h> 
#include <string.h> 

int main()
{ 
    FILE *fp; 
    char linea[256];
    char *divlinea, *space;
    char curremitt[256], maxemitt[256], maxtipo[256];
    int currspett, maxspett=0;
    int orario, forario;
     
    printf("Dammi un orario per sapere i programmi trasmessi: "); 
    scanf("%d", &orario); 
     
    if(fp=fopen("auditel.txt","r"))
    { 
        fgets(linea, 256, fp);
        while(!feof(fp)) 
        { 
            forario = atoi(linea);
            if(forario==0)
            {
                strcpy(curremitt, linea);
                curremitt[strlen(curremitt)-1]='Probabilmente ci avresti dovuto pensare un po' prima ... se domani hai l'esame e non sai fare "al volo" questo tipo di compiti, allora la vedo male ...


Comunque, anche se scritto velocemente (probabilmente da correggere da qualche parte e da ottimizzare), prendi spunto da questo codice ...

#include <stdio.h> 
#include <string.h> 

int main()
{ 
    FILE *fp; 
    char linea[256];
    char *divlinea, *space;
    char curremitt[256], maxemitt[256], maxtipo[256];
    int currspett, maxspett=0;
    int orario, forario;
     
    printf("Dammi un orario per sapere i programmi trasmessi: "); 
    scanf("%d", &orario); 
     
    if(fp=fopen("auditel.txt","r"))
    { 
        fgets(linea, 256, fp);
        while(!feof(fp)) 
        { 
            forario = atoi(linea);
            if(forario==0)
            {
                strcpy(curremitt, linea);
                curremitt[strlen(curremitt)-1]='{parsed_message}';
            }

            if(forario==orario)
            {
                divlinea = strchr(linea, '|');
                currspett = atoi(divlinea+1);
                if(currspett>maxspett)
                {
                    maxspett = currspett;
                    strcpy(maxemitt, curremitt);
					
                    space=strchr(linea, ' ');
                    strcpy(maxtipo, space+1);
                    maxtipo[divlinea-space-1]='{parsed_message}';
                }
            }

            fgets(linea, 256, fp);
        } 

        fclose(fp);

        printf("%d %s %s\n", orario, maxemitt, maxtipo);
    } 
    else
        printf("Impossibile leggere il file\n");

    return 0;
}
'; } if(forario==orario) { divlinea = strchr(linea, '|'); currspett = atoi(divlinea+1); if(currspett>maxspett) { maxspett = currspett; strcpy(maxemitt, curremitt); space=strchr(linea, ' '); strcpy(maxtipo, space+1); maxtipo[divlinea-space-1]='Probabilmente ci avresti dovuto pensare un po' prima ... se domani hai l'esame e non sai fare "al volo" questo tipo di compiti, allora la vedo male ...

Comunque, anche se scritto velocemente (probabilmente da correggere da qualche parte e da ottimizzare), prendi spunto da questo codice ...

#include <stdio.h> 
#include <string.h> 

int main()
{ 
    FILE *fp; 
    char linea[256];
    char *divlinea, *space;
    char curremitt[256], maxemitt[256], maxtipo[256];
    int currspett, maxspett=0;
    int orario, forario;
     
    printf("Dammi un orario per sapere i programmi trasmessi: "); 
    scanf("%d", &orario); 
     
    if(fp=fopen("auditel.txt","r"))
    { 
        fgets(linea, 256, fp);
        while(!feof(fp)) 
        { 
            forario = atoi(linea);
            if(forario==0)
            {
                strcpy(curremitt, linea);
                curremitt[strlen(curremitt)-1]='{parsed_message}';
            }

            if(forario==orario)
            {
                divlinea = strchr(linea, '|');
                currspett = atoi(divlinea+1);
                if(currspett>maxspett)
                {
                    maxspett = currspett;
                    strcpy(maxemitt, curremitt);
					
                    space=strchr(linea, ' ');
                    strcpy(maxtipo, space+1);
                    maxtipo[divlinea-space-1]='{parsed_message}';
                }
            }

            fgets(linea, 256, fp);
        } 

        fclose(fp);

        printf("%d %s %s\n", orario, maxemitt, maxtipo);
    } 
    else
        printf("Impossibile leggere il file\n");

    return 0;
}
'; } } fgets(linea, 256, fp); } fclose(fp); printf("%d %s %s\n", orario, maxemitt, maxtipo); } else printf("Impossibile leggere il file\n"); return 0; }
Ultima modifica effettuata da nessuno 24/01/10 11:46
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
24/01/10 14:20
wicca89
Grazie x l'aiuto e non ha bisogno di modifiche :k: intanto avevo fatto una cosa del genere ma senza il controllo del carattere "|".
L'unica modifica che ho apportato e'l'apertura del file l'ho messa a parte e nell'if il controllo perchè mi sembrava più ordinato:
fp=fopen("auditel.txt","r");
    
    if(fp!=NULL)    {   


Non so se puoi spiegarmi una cosa...atoi sapevo che faceva parte della libreria stdlib.h
ma funziona anche senza come mai??ank su un link girando per google ho trovato k appartiene a stdlib.h e grazie ancora!
Ultima modifica effettuata da wicca89 24/01/10 14:23
aaa
24/01/10 14:24
nessuno
stdlib.h NON è una libreria ma un semplice file include.

A seconda dell'ambiente in cui operi, alcuni include potrebbero essere aggiunti di default ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
24/01/10 14:49
Lawliet
Stai usando il Dev-c++? Se non ricordo male quello aveva di default parecchie funzioni.
aaa