"); scanf("%d", &xAntal ); Inmatning( studentVektor, &antal, xAntal ); Kontroll( studentVektor, antal ); StangFil( filPek, studentVektor, antal ); return; } Antal studenter i arrayen. Detta värde hålls hela tiden aktuellt Programmeringsidé Studenterna är indelade i grupper om max 30 st. Varje gupp motsvaras av en egen datafil. Uppdatera studentdata genom att läsa in alla poster från datafilen till en vektor. Bearbeta posterna i vektorn och när allt är klart så skriv tillbaks alla posterna till datafilen. Antal studenter som skall tilllfogas"> "); scanf("%d", &xAntal ); Inmatning( studentVektor, &antal, xAntal ); Kontroll( studentVektor, antal ); StangFil( filPek, studentVektor, antal ); return; } Antal studenter i arrayen. Detta värde hålls hela tiden aktuellt Programmeringsidé Studenterna är indelade i grupper om max 30 st. Varje gupp motsvaras av en egen datafil. Uppdatera studentdata genom att läsa in alla poster från datafilen till en vektor. Bearbeta posterna i vektorn och när allt är klart så skriv tillbaks alla posterna till datafilen. Antal studenter som skall tilllfogas">

Presentation laddar. Vänta.

Presentation laddar. Vänta.

Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.

Liknande presentationer


En presentation över ämnet: "Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil."— Presentationens avskrift:

1 Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil

2 Anders Sjögren Bitfält exempel #include typedefstruct { unsignedar: 7, manad :4, dag :5, kontroll :14, :2, unsignedten1 :4, ten2 :4, lab :4, proj :4 ; } studentDataTyp ; FILE* OppnaFil( studentDataTyp*, int* ); void StangFil( FILE*, studentDataTyp*, int ); void Inmatning( studentDataTyp*, int*, int ); void Kontroll( studentDataTyp*, int ); Strukturen ser ut som tidigare Programmets funktioner

3 Anders Sjögren Bitfält exempel int main( void ) { studentDataTypstudentVektor[30]; intantal=0, xAntal ; FILE*filPek=NULL; filPek = OppnaFil( studentVektor, &antal ); printf("Hur många studenters prestationer skall matas in?--> "); scanf("%d", &xAntal ); Inmatning( studentVektor, &antal, xAntal ); Kontroll( studentVektor, antal ); StangFil( filPek, studentVektor, antal ); return; } Antal studenter i arrayen. Detta värde hålls hela tiden aktuellt Programmeringsidé Studenterna är indelade i grupper om max 30 st. Varje gupp motsvaras av en egen datafil. Uppdatera studentdata genom att läsa in alla poster från datafilen till en vektor. Bearbeta posterna i vektorn och när allt är klart så skriv tillbaks alla posterna till datafilen. Antal studenter som skall tilllfogas

4 Anders Sjögren Bitfält exempel int main( void ) { studentDataTypstudentVektor[30]; intantal=0, xAntal ; FILE*filPek=NULL; filPek = OppnaFil( studentVektor, &antal ); printf("Hur många studenters prestationer skall matas in?--> "); scanf("%d", &xAntal ); Inmatning( studentVektor, &antal, xAntal ); Kontroll( studentVektor, antal ); StangFil( filPek, studentVektor, antal ); return; } Kan du motivera varför parameterlistan ser ut som den gör? nästa bild

5 Anders Sjögren Bitfält exempel FILE* OppnaFil( studentDataTyp pVektor[], int* antalPek ){ FILE*filPek; charfilnamn[20]; printf("\nVilken fil skall öppnas? --> "); scanf("%s",filnamn); if ( (filPek=fopen(filnamn,"r+b")) != NULL ) while (fread(&pVektor[*antalPek],sizeof(studentDataTyp),1,filPek)) (*antalPek)++ ; else filPek=fopen(filnamn,"w+b"); return filPek; } Ur main()

6 Anders Sjögren void Inmatning( studentDataTyp pVektor[], int* antalPek, int extra ){ inti, temp; for ( i=(*antalPek) ; i < (*antalPek)+extra ; i++ ) { printf("\nStudent nr%d :\n", i+1); printf("==============\n"); printf("Född år, xx -> "); scanf("%d",&temp); pVektor[i].ar = temp ; printf(" månad, xx -> "); scanf("%d",&temp); pVektor[i].manad = temp ; printf(" dag, xx -> "); scanf("%d",&temp); pVektor[i].dag = temp ; printf("konrollnummer,xxxx -> "); scanf("%d",&temp); pVektor[i].kontroll = temp ; printf("TEN1 betyg -> "); scanf("%d",&temp); pVektor[i].ten1 = temp ; printf("TEN2 betyg -> "); scanf("%d",&temp); pVektor[i].ten2 = temp ; printf("LAB betyg -> "); scanf("%d",&temp); pVektor[i].lab = temp ; printf("PROJ betyg -> "); scanf("%d",&temp); pVektor[i].proj = temp ; } (*antalPek) += extra ; return; } Ur main()

7 Anders Sjögren void Kontroll( studentDataTyp pVektor[], int antal ){ int i ; for ( i=1 ; i <= antal ; i++ ) { printf("\nStudent nr%d, kontroll :", i); printf("\n========================\n"); printf("Född år, : %d \n", pVektor[i-1].ar); printf(" månad, : %d \n", pVektor[i-1].manad); printf(" dag, : %d \n", pVektor[i-1].dag); printf("konrollnummer: %d \n", pVektor[i-1].kontroll); printf("TEN1 betyg : %d \n", pVektor[i-1].ten1); printf("TEN2 betyg : %d \n", pVektor[i-1].ten2); printf("LAB betyg : %d \n", pVektor[i-1].lab); printf("PROJ betyg : %d \n", pVektor[i-1].proj); } return; } Bitfält exempel Ur main()

8 Anders Sjögren void StangFil( FILE* filPek, studentDataTyp pVektor[], int antal ){ rewind( filPek ); fwrite( pVektor, antal*sizeof( studentDataTyp ),1,filPek ); fclose( filPek ); return; } Bitfält exempel Ur main()

9 Anders Sjögren Parameterlistan på webtentan Tag reda på …  Vilka datatyper anropas funktionen med?  Vilken datatyp returneras? Belöningen: När Du avslöjat alla parametrar kan Du kompilera projektet och se programmet köra!

10 Anders Sjögren Hjälpmedel för att läsa binärfiler programmet hexdump.c /* hexdump.c */ #include #include int main(int argc, char *argv[]) { char filnamn[25]; unsigned int i=0; unsigned char c; FILE *inFil; printf("Vilken bin\204rfil ska HEX-dumpas?\n"); scanf("%s", filnamn); inFil = fopen( filnamn, "rb"); printf("\n"); while ( fread( &c, sizeof( char ), 1, inFil )== 1 ) { printf("%02X ", c ) ; /* 2-siffrigt hextal */ /* ny rad efter var fjärde byte */ if(++i%4==0)printf("\n"); } fclose( inFil ); printf("\n"); system("PAUSE"); return 0 ; } Kontrollera innehållet i en binärfil? Varje Byte blir två hex-bokstäver, och fyra sådana hexpar på en rad motsvarar en int eller float. Enklast är att placera programmet hexdump.exe i mappen där din binärfil ligger.

11 Anders Sjögren

12 Laborationsuppgift Laborationsuppgift Lab 4 ( Laborationsuppgift av Kenneth Börgesson ) Del 1 Att under två laborationspass göra ett program som från tangentbordet läser in godtyckligt antal komplexa tal och lagrar dem i en ny fil som antingen är en textfil eller en binärfil. Programmet ska fråga om man önskar textfil eller binärfil. Innan programmet avslutas ska det öppna den nyskapade filen och skriva ut innehållet på skärmen ( som verifikation på inmatningen ). Del 2 Gör ett tillägg till programmet så att det, för en av filtyperna, även går att lägga till eller ta bort ett värde ( ett komplext tal, ett talpar ) till en befintlig fil. Det spelar ingen roll i vilken ordning talen i filen hamnar. Enklast är om det är sista talet som kan tas bort. Lite mer komplicerat är det om det är det n:e talet som ska kunna tas bort. Välj själv... Gör ett JSP-diagram över ditt program. ( Om strukturen från de tidigare laborationerna kan bibehållas så har Du redan JSP-diagrammet! )


Ladda ner ppt "Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil."

Liknande presentationer


Google-annonser