Föreläsning 10: In- och utmatning speciellt filhantering
|
|
- Stig Lund
- för 7 år sedan
- Visningar:
Transkript
1 Föreläsning 10: In- och utmatning speciellt filhantering Vi har genom hela kursen arbetat med in- och utmatning i våra program. Varje gång vi anropar printf(), scanf(), gets() osv har vi gjort in- eller utmatning, eller IO som det ofta förkortas inom datortekniken. Det är givetvis oerhört väsentligt med IO, utan det kan vi inte få ut något resultat av våra program eller mata in några indata till våra program Strömmar Följande är en föreställning om vad en fil på en hårddisk är: en följd av lagringsutrymmen som håller kvar sitt innehåll då datorn är avstängd. Men för att kommunicera med filer, alltså antingen läsa från dem eller skriva till dem (IO) inför vi ett mellanled, en ström. En ström är den punkt som ett program använder för att kommunicera med till exempel en fil på en hårddisk, man säger att man öppnar strömmen och associerar den till en fil. Men vi brukar faktiskt uttrycka oss lite kortare och referera till en ström som om det vore en fil, då säger vi att vi öppnar filen. Filpekare Vi måste alltså alltid ha en ström för att komma åt en fil. En ström kommer vi åt via något som kallas en filpekare (vilket återigen visar hur tätt kopplade begreppen fil och ström är). I ett program som ska arbeta med filer behövs filpekare, vi deklarerar dem så här FILE *fp1, *fp2; och här har vi exempel på hur vi har två strömmar som vi kan använda. Dock innan vi kan använda dem måste de öppnas, mer om det senare. Omdirigering: läs jsälva Textfiler och binärfiler Textfiler kan människor läsa, binärfiler är det ofta mycket svårt för en människa att läsa utan speciella program. Källkoden för ett C-program är lagrat i en textfil, däremot är den körbara koden hörande till programmet lagrat i en binärfil. Den precisa tekniska betydelsen av textfil är att de är indelade i rader och kan ha ett filslutstecken. (Men det betyder egentligen inte så mycket.) Man kan läsa en textfil rad för rad. Alla filer (både binära och textfiler) är en lång följd av bytes. Men i en textfil återkommer radbytestecknet då och då för att markera radslut. (I UNIX är radslutstecknet nr 10, i Windows, nr 13 följt av nr 10, alltså två tecken). Binärfiler har inte denna uppdelning i rader. Observera att skillnaden mellan text- och binärfil är främst ett val av perspektiv: samma fil kan öppnas och behandlas som textfil och senare som binärfil, men det är ofta inte meningsfullt att se en fil som hörande till båda slagen. Om vi till exempel, med en texteditor, som Emacs, öppnar filen som innehåller ett körbart program så går det att göra, men det vi ser är inte meningsfullt. Textfiler anses bestå av följder av tecken, som till exempel källkoden till ett C-program. Om vi ska lagra talet i en textfil så blir det i form av fem tecken, '3', '2', '7', '6', '7'. Det upptar fem bytes och det är en textmässig representation som lagras, alltså tecknena, som då i sin tur baseras på ASCII-tabellen, till exempel tecknet '3' har asciikoden 51 som har bitmönstret Skillnaden om man lagrar det hela binärt är att bitmönstret för talet lagras. Det är Det upptar bara 2 bytes. Det är dessutom lagrat i den form som datorn använder internt då den räknar, vi kan alltså utföra räkneoperationer på binär data. Om vi ska utföra räkneoperationer på data lagrat i en textfil måste vi först omvandla till binär form. Man kan säga att en binärfil innehåller en exakt kopia av data såsom datorn representerar det och när man läser in en binärfil i datorns minne behövs därför inga omvandlingar som i fallet med data lagrat i textfiler Operationer på filer Det första vi måste göra för att komma åt innehållet i en fil är att öppna den. Det gör vi med hjälp av en operation på en ström med systemanropet fopen(). Vi studerar ett utdrag ur en manualsida, johnnyp@kth.se Sidan 1 av 11
2 man fopen: NAME HI1024 Programmering, grundkurs, 8.0 hp, KTH STH, hösten 2012 fopen, fdopen, freopen - stream open functions SYNOPSIS FILE *fopen(const char *path, const char *mode); FILE *fdopen(int fd, const char *mode); FILE *freopen(const char *path, const char *mode, FILE *stream); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): fdopen(): _POSIX_C_SOURCE >= 1 _XOPEN_SOURCE _POSIX_SOURCE DESCRIPTION The fopen() function opens the file whose name is the string pointed to by path and associates a stream with it. The argument mode points to a string beginning with one of the following sequences (Additional characters may follow these sequences.): r Open text file for reading. The stream is positioned at the beginning of the file. r+ Open for reading and writing. The stream is positioned at the beginning of the file. w Truncate file to zero length or create text file for writing. The stream is positioned at the beginning of the file. w+ Open for reading and writing. The file is created if it does not exist, otherwise it is truncated. The stream is positioned at the beginning of the file. a Open for appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the end of the file. a+ Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file position for reading is at the beginning of the file, but output is always appended to the end of the file. The mode string can also include the letter 'b' either as a last character or as a character between the characters in any of the two-character strings described above. This is strictly for compatibility with C89 and has no effect; the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-unix environments.) Ett exempel på ett anrop kan vara fp1 = fopen( mytextfile.txt, r ); vilket öppnar en textfil för läsning. Vi kan öppna en textfil för att lägga till saker genom att skriva fp1 = fopen( mytextfile.txt, a ); eller skapa en helt ny fil genom att skriva w sist. johnnyp@kth.se Sidan 2 av 11
3 Faktiskt så är det så att vi också kan hantera binärfiler på samma sätt vi behöver inte lägga till ett b i anropet i POSIX/UNIX, men om vi ska skriva program för Windows måste vi göra det om vi ska hantera binärfiler. Vi kommer dock i denna kurs inte att göra så mycket med filer, vi kommer att klara oss med r och w. Det är inte så fasligt avancerat att använda sig av andra sätt att öppna filer (det här med +, och a ) men det lämnar vi utanför denna kurs, vi försöker begränsa oss så mycket vi kan i denna kurs utan att förlora det vi verkligen behöver för att kunna programmera ordentligt. Då en fil öppnas kontrollerar operativsystemet om filen finns och man har rättigheter att öppna filen på det sätt man begär. Om man har läsrättigheter på en fil så kommer anropet till fopen() med r att lyckas, men w eller a kommer inte att lyckas. Vi får inget felmeddelande om detta, vi måste kolla om returvärdet från fopen() är en NULL-pekare, det betyder att anropet inte har lyckats. Vi ser ofta konstruktioner av typen fp = fopen( afile, w ); if(fp == NULL) printf( Cannot open file.\n ); exit(exit_failure); som alltså avslutar programmet om programmet inte lyckas öppna en viss fil. Möjligtvis kanske man inte behöver avsluta ett program, man kan ge användaren en chans till att ge en annan fil, men ovanstående är ändå ganska standardmässigt. När vi öppnat en fil och arbetat med den (skrivit eller läst eller vad vi nu ska göra) måste strömmen som är associerad med filen stängas. Det är först när filen är stängd som den säkert innehåller det som vårt program vill. Om vi öppnat en fil för skrivning, skrivit en hel del till den ström som är associerad med filen, så skrivs kanske inte dessa ändringar till disken, alltså till den fysiska filen, förrän strömmen stängs. Anledningen är att data mellanlagras i strömmen i buffrar vars innehåll skrivs ut då filen stängs. En möjlighet är också att explicit begära att buffrarna töms med ett anrop som heter fflush() men vi ska inte gå in på det. Vi satsar på att stänga strömmar/filer istället. Det görs med kommandot fclose() och man skickar in filpekaren som returnerats från fopen(). Från och med nu kommer vi också att säga, väldigt ofta, att vi stänger filen snarare än strömmen och vi menar då att vi stänger den ström som har den avsedda filen associerad till sig. Ni kan själva läsa om temporärfiler och buffring, det är inte nödvändigt för att klara kursen, men om ni vill läsa om det går det förstås utmärkt. Avsnittet om att ta in filnamn från kommandoraden har vi redan gått igenom i och med att vi vet från kapitlet om strängar hur man tar in strängar från kommandoraden Formatterad IO Vi har redan använt formaterad IO väldigt mycket, f:et i namnen på printf() och scanf() står just för formattering. Namnet på printf() ska utläsas, print a formatted string, alltså skriv ut en formaterad sträng. Det innebär att vi egentligen redan känner till det centrala när det gäller formatterad IO till och från strömmar: det centrala är just formatsträngen som vid anrop med till exempel printf() omvandlas enligt de omvandlingsspecifikationer vi angett, tex %d och liknande. Vi tar ett par exempel på en gång. Vi känner som sagt redan till formaterad IO, vi har gjort formatterad utmatning till skärmen med printf() och formaterad inmatning från tangentbordet med scanf(). Strömmarna stdin och stdout är två fördefinerade strömmar som är kopplade till skärm och tangentbord som förval och vi ska nu se hur vi kopplar strömmar till filer på disk. Vi johnnyp@kth.se Sidan 3 av 11
4 studerar ett redigerat utdrag ur manualsidan till printf(), vi ger kommandot man printf vid en prompt: NAME printf, fprintf, sprintf, snprintf - formatted output conversion SYNOPSIS int printf(const char *format,...); int fprintf(file *stream, const char *format,...); int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...); DESCRIPTION The functions in the printf() family produce output according to a format as described below. The functions printf() writes output to stdout, the standard output stream; fprintf() writes output to the given output stream; sprintf(), snprintf() write to the character string str. The function snprintf() writes at most size bytes (including the trailing null byte ('\0')) to str. These functions write the output under the control of a format string that specifies how subsequent arguments (or arguments accessed via the variable-length argument facilities of stdarg(3)) are converted for output. C99 and POSIX specify that the results are undefined if a call to sprintf(), snprintf() would cause copying to take place between objects that overlap (e.g., if the target string array and one of the supplied input arguments refer to the same buffer). See NOTES. Return value Upon successful return, these functions return the number of characters printed (not including the trailing '\0' used to end output to strings). Ovan har vi tagit bort beskrivningen av en kategori av funktioner som börjar med v, tex vprintf(), vi väljer att göra det för att begränsa innehållet i kursen. Om ni studerar en manualsida till printf() kommer ni att hitta information om dessa funktioner, ni kan då bortse från den informationen om ni vill. Argumentlistan till printf() har utseendet const char *format,.... Här ser vi tre punkter i rad,..., det betyder att funktionen printf() accepterar flera argument men man behöver inte på förhand ange exakt hur många argument vi skrickar till printf() - det kallas för en ellips (engelska ellipsis) och indikerar ett variabelt antal element. Vi är ju vana vid att printf() kan ta flera argument, vi skriver till exempel printf( Tal 1: %d.\n, x); och anropar då printf() med två argument, en formatsträng och ett heltal, men vi kan ju också göra printf( Tal 1: %d Tal 2: %d.\n, x, y); och då anropar vi samma funktion, printf(), fast med tre argument, en formatsträng och två heltal. Det gemensamma för båda anropen är att formatsträngen måste vara där och det är alltså den som anges i parameterlistan i funktionsprototypen till printf() som vi såg ovan, alltså const char *format,.... Funktionen printf() används för utmatning till strömmen stdout, som normalt är skärmen, men när vi nu ska gå vidare och studera funktioner som gör utmatning till andra strömmar som kanske ska associeras med filer på disken studerar vi funktioner som är besläktade med printf() johnnyp@kth.se Sidan 4 av 11
5 men som har en extra parameter som anger vilken ström som avses. Vi ska börja med att studera den enklaste, fprintf(). Vi tittar på dess funktionsprototyp: int fprintf(file *stream, const char *format,...); Vi ser att vi, liksom printf(), har parametrarna const char *format,... men att det först ska anges en parameter till den ström som avses, FILE *stream. Det är bra att vi studerar manualsidan på detta sätt, de ger oss upplysningar om hur funktionerna ska anropas. Vi kan nu konstruera ett enkelt exempel baserat på denna dokumentation: main() FILE * fp1; int number_of_cows = 5; double temperature = 25.5; printf("a string: %s.\na floating point number: %.1f.\nAn integer: %d.\n", "Charles", temperature, number_of_cows); fp1 = fopen ("newtextfile.txt", "w"); fprintf(fp1, "A string: %s.\na floating point number: %.1f.\nAn integer: %d.\n", "Charles", temperature, number_of_cows); fclose(fp1); Om vi kör ovanstående program så får vi utskriften: A string: Charles. A floating point number: An integer: 5. och det kommer av anropet till printf() som vi ser i programmet och vi är såpass bekanta med printf() att vi kan se att den utskrift vi har verkligen härör från anropet i programmet. Vad vi inte ser i utskriften är att precis denna text, som skrivs ut på skärmen, också skrivs in i en ny fil som skapas av programmet, vi börjar med att öppna strömmen fp1 och associera filen newtextfile.txt med den, eller kortare uttryckt, vi öppnar filen newtextfile.txt för skrivning. Därefter gör vi anropet till fprintf() som då alltså skriver till strömmen fp1, på precis samma sätt som printf() skrev till skärmen den text som vi såg. När vi till sist stänger strömmen fp1, med fclose(fp1) så skrivs innehållet till textfilen på hårddisken. Vi kan då göra cat newtextfile.txt och får precis samma utskrift som ovan vilket bekräftar att filen skapats med det innehåll vi ville. Vi åstadkommer alltså detta genom att bara addera parametern fp1, i anropet till fprintf(). Och förstås genom att öppna innan för skrivning och sedan stänga. När det gäller strömmar så är fp1, i ovanstående exempel associerad med filen som vi skapar. Men vi kan faktiskt också skriva till andra strömmar. Strömmen stdout är normalt skärmen och om vi skriver fprintf(stdout, Test ); så är det samma sak som att skriva printf( Test );. Det betyder att om vi i anropet till fprintf() i programmet ovan hade struntat i strömmen fp1 och skrivit fprintf(stdout, "A string: %s.\na floating point number: %.1f.\nAn integer: %d.\n", "Charles", temperature, number_of_cows); så hade resultatet blivit detsamma som den tidigare utskriften. Filen som associerades till strömmen fp1 hade inte fått något innehåll utan programmet skulle bara gjort likadana utskrifter efter varandra. (Om vi hade haft kvar fopen() och fclose() hade filen bara skapats men blivit tom.) johnnyp@kth.se Sidan 5 av 11
6 De goda nyheterna är att svårare än så här är inte formaterad utmatning. Nästa funktion vi kan studera är sprintf(), men den är ännu enklare, den fungerar precis som fprintf() men den skriver till en sträng istället för en ström. Då behöver vi inte öppna och stänga, det enda som behövs är att strängen som vi skriver till är deklarerad på ett bra sätt. Den här funktionen är användbar om vi vill skapa en sträng och returnera den men inte nödvändigtvis skriva ut den på skärmen. Vi vill låta programmeraren avgöra hur strängen ska hanteras, antingen skrivas ut, eller kanske slås ihop med andra strängar och sedan skrivs det ut. Det ger oss flexibilitet. Det är inte så ofta sprintf() behövs men när den behövs är den oslagbar. Funktionen snprintf() är en säkrare variant som ni kan studera själva. Formaterad inmatning gör vi med en släkting till scanf() som (analogt med fprintf()) heter fscanf(), och den fungerar i princip på precis samma sätt som som scanf() men man kan alltså ställa in den så att den behandlar en annan ström än stdin. Om vi skriver ett program som är motsvarigheten till programmet ovan, som öppnar filen newtextfile.txt för läsning och läser in data och skriver ut på skärmen så kan det se ut så här: main() FILE * fp1; int number_of_cows; double temperature; char str[40]; fp1 = fopen ("newtextfile.txt", "r"); fscanf(fp1, "A string: %s.\na floating point number: %lf.\nan integer: %d.\n", str, &temperature, &number_of_cows); fclose(fp1); printf("string: %s\n", str); printf("floating pt nr: %.1f.\n", temperature); printf("an integer: %d.\n", number_of_cows); Alltså en enkel inläsning av de data vi skrivit in i filen. Tyvärr fungerar inte det här programmet som det är tänkt, om vi kör det får vi följande resultat: String: Charles. Floating pt nr: 0.0. An integer: 0. Vi lyckas alltså inte få in de två talen på rätt plats. Rent teoretiskt kan man använda fscanf() på det här sättet och bilda olika formatsträngar med omvandlingsspecifikationer, men det är mer snärjigt än att bara ta samma formatsträng som fprintf() använde vid skapandet av filen. För att få saker att fungera på ett solitt sätt är det först och främst bättre att använda binärfiler, men om vi vill använda textfiler (som här) är det bättre att läsa från filen i små portioner, först läsa rad 1, sedan rad 2 osv. Omvandlingsspecifikationen %s är också särskilt lömsk, den läser ända till radslut, mellanslag, eller tabulatorsteg, vi ser utskriften String: Charles. i testkörningen, men detta ges i respons till anropet printf("string: %s\n", str);. Problemet här är att det inte finns någon punkt (.) i detta anrop. Men vi ser en punkt i resultatet... vad händer? Det som hänt är att punkten från textfilen lästs in tillsammans med texten Charles och det som händer då är att fscanf() har kvar att matcha.\na floating point number: %lf.\nan integer: %d.\n" mot innehållet som är kvar i filen som är johnnyp@kth.se Sidan 6 av 11
7 A floating point number: An integer: 5. Det finns ingen punkt här och där brakar läsningen samman, vi kommer i otakt. Det är därför vi får nollor som värden till temperature och number_of_cows. Det går att skriva formatsträngar så att vi klarar oss bra, att tänka och vända och vrida på det, men vi avstår från det. Det är bättre att använda binärfiler som sagt, och det ska vi göra snart, men om vi väldigt gärna vill arbeta med textfiler är det bättre för oss om vi hanterar dem rad för rad istället. Vi kan lösa detta problem bättre när vi hanterar inmatning radvis, vi kommer att studera det lite senare, så vi släpper just det här problemet nu, det är normalt inte så här man gör heller med textfiler så vi ska inte slösa tid på att studera detta. Vi kan bara översiktligt säga att det skulle vara mycket lättare om vi inte skulle blanda tal och text utan använde ett enklare filformat där heltalet 5 och flyttalet 25.5 förekom på egna rader. Vi går vidare till något mer produktivt istället. Då det gäller formaterad in- och utmatning finns det väldigt många omvandlingsspecifikationer. Vi ska inte lära oss alla dessa, det är bättre om vi vet var vi kan slå upp dem någonstans. Vi ska bara nämna definitionen av något som kallas white space. Vi har stött på det tidigare, så vi läser med fscanf() och har %s som omvandlingsspecifikation så läser fscanf() tills nästa mellanslag, radbytestecken eller tabulatorsteg. Dessa tre avgränsare kallas med ett gemensamt namn för white space. Det var anledningen till att %s ovan innebar att punkten lästes in från filen och slogs samman med Charles och bildade den sträng som fscanf() läste in, vi läste fram till nästa white space och fick då innehållet Charles. i strängen. Vi måste se upp med %s vid inmatning IO tecken för tecken och 22.5 Radvis IO Vi ska studera funktioner som skriver och läser enskilda tecken eller hela rader av tecken till och från strömmar. Namnen på dessa funktioner är fputc(), fputs(), putc(), putchar() och puts()för utmatning av tecken (de med c i namnet) och rader (de med s i namnet). Vidare har vi fgetc(), fgets(), getc(), getchar() och gets() för inmatning. Hit hör också en specialfunktion som heter ungetc() som kan användas för att temporärt stoppa tillbaka ett tecken man redan läst. Om vi studerar manualsidorna för dessa funktioner så får vi en sammanfattning av vad de gör. De med c i namnet läser respektive skriver till en öppen ström ett tecken i taget och det finns egentligen inte så mycket att säga om det. Det finns bara några enskilda saker som är värda att notera: fgetc(), getc() och getchar() returnerar heltal, alltså int och inte char. Det värde som returneras är antingen en angivelse av att filen är slut, då blir det 1 som är asciikoden för EOF, End Of File eller så ges ett värde mellan 0 och 255 som är ett så kallat unsigned char, ett tecken med asciikoder i intervallet 0 till 255. getc() är ibland skapat som ett så kallat makro. Det betyder att om vi skriver ch=getc(fp1()); för att läsa från en ström som returneras av en funktion, fp1() så kan det hända att denna funktion anropas två gånger. Vi ska vara försiktiga med detta. För att vara på säkra sidan så kan man se till att aldrig göra funktionsanrop i argumenten till getc() eller använda fgetc() som inte är ett makro. Beträffande putc() och fputc() så gäller samma som för fgetc() och getc(), nämligen att är putc() ett makro och det är då inte bra med funktionsanrop i argumenten till putc(). För att göra saker enkla, använd helt enkelt bara fputc() istället. Studera mycket gärna exemplet Copying a File på sidan 568. johnnyp@kth.se Sidan 7 av 11
8 Då det gäller in- och utmatning av hela rader används funktionerna med s i sitt namn, fgets(), gets(), fputs() och puts(). Funktionen puts() skriver en sträng till skärmen följt av ett nyradstecken (som man alltså får på köpet) och fputs() kan ställas in så att strängen skrivs till en ström istället, men då skrivs inget nyradstecken och inte heller en avslutande nolla. Det är intressantare att diskutera inmatningsfunktionerna, fgets() och gets(). Vi har troligtvis använt många gånger i olika program. Den läser, som bekant, från stdin, och lägger in resultatet i den sträng som den opererar på. Problemet med den är att det inte finns någon begränsning på hur många tecken den läser in, vi har också troligtvis sett många gånger en varning om att funktionen gets() är osäker och vi kan, från och med nu, rätta till detta. Tidigare har vi skrivit gets(str) då vi velat mata in en sträng i str, men nu kan vi skriva så här istället: fgets(str, sizeof(str), stdin); då är vi säkra på att en begränsning införs, den andra parametern, sizeof(str), är denna övre gräns. Givetvis kan användas för att läsa från andra strömmar än stdin, vi går tillbaka till vårt ursprungliga problem att läsa i filen med detta innehåll: A string: Charles. A floating point number: An integer: 5. Ett program som verkligen klarar av att göra detta visas nedan: main() FILE * fp1; char str_from_file[100]; int number_of_cows; double temperature; char str[40]; fp1 = fopen ("newtextfile.txt", "r"); fgets(str_from_file,sizeof(str_from_file),fp1); printf("line 1: %s", str_from_file); sscanf(str_from_file, "A string: %s", str); fgets(str_from_file,sizeof(str_from_file),fp1); printf("line 2: %s", str_from_file); sscanf(str_from_file, "A floating point number: %lf.", &temperature); fgets(str_from_file,sizeof(str_from_file),fp1); printf("line 3: %s", str_from_file); sscanf(str_from_file, "An integer: %d.\n", &number_of_cows); fclose(fp1); printf("string: %s\n", str); printf("floating pt nr: %.1f.\n", temperature); printf("an integer: %d.\n", number_of_cows); Det här kanske verkar vara ett stort program, men är ändå mer systematiskt än det tidigare johnnyp@kth.se Sidan 8 av 11
9 programmet som inte fungerade som vi ville. Här använder vi fgets() för att först säkert få in hela raden från textfilen följt av sscanf() för att sedan läsa detaljerna på varje rad och på så sätt extrahera ut den information vi vill ha, då är det lätt att få in rätt data i rätt variabel. Provkörningen ser ut så här: Line 1: A string: Charles. Line 2: A floating point number: Line 3: An integer: 5. String: Charles. Floating pt nr: An integer: 5. Nu får vi verkligen in 25.5 i en flyttalsvariabel och 5 i heltalsvariabeln Blockvis IO Vid alla former av in- och utmatning vi hittills stött på har vi ofta gått igenom de olika datastrukturerna som ska med någon form av loop och läst eller skrivit till den ström som varit associerad med den fil där vi lagrar data. Vid användning av fprintf() och fputs() har vi hittills dessutom skapat en textorienterad representation av data som, när vi läser in den igen, behöver omvandlas tillbaka till binär form. (Som datorn kan räkna med.) Nu ska vi se på en helt annan form av in- och utmatning som behåller datorns binära representationssätt också i den fil som skapar: så kallad blockvis IO. Vi åstadkommer blockvis IO med de båda funktionerna fread() och fwrite(). Dessa funktioner är dessutom konstruerade så att man ofta slipper anropa dem med hjälp av en loop. Vi ser på ett exempel på en gång. Följande program skriver innehållet i en array av 10 heltal till en fil som heter numbers: main() FILE *fp; int a[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; fp = fopen("numbers", "wb"); fwrite(a, sizeof(a[0]), sizeof(a) / sizeof(a[0]), fp); fclose(fp); En provkörning ger ingen utskrift eftersom vi inte skriver någonting till skärmen, vi skriver till filen som heter numbers. Skrivningen sker i och med anropet till fwrite() och argumenten är a, sizeof(a[0]), sizeof(a) / sizeof(a[0]) och fp. Då vi har arrayen a med 10 heltal så antar dessa parametrar värdena: * adressen till a[0], alltså startpunkten för utmatningen, * 4 (eftersom int har storleken 4), * 40/4 som är 10, vilket anger antalet element som ska matas ut och * fp är förstås pekaren till strömmen. Om vi ändrar i programmet så att vi istället läser ifrån filen (via strömmen) till en tom array så är det mycket lätt att göra, fread() har nämligen samma parametrar som fwrite(), vi anger alltså först vart startpunkten för det som ska läsas in ska vara (arrayen a), sedan 4 (i form av sizeof(a[0]), följt av 10 (i form av sizeof(a) / sizeof(a[0])) och sist pekaren till den ström vi läser från. Hela programmet ser då ut nästan som det program som skrev filen, så här: johnnyp@kth.se Sidan 9 av 11
10 HI1024 Programmering, grundkurs, 8.0 hp, KTH STH, hösten 2012 main() FILE *fp; int i, a[10]; fp = fopen("numbers", "rb"); fread(a, sizeof(a[0]), sizeof(a) / sizeof(a[0]), fp); fclose(fp); printf("numbers: "); for(i=0;i<10;i++)printf("%d ", a[i]); printf("\n"); Körningen ser ut så här: Numbers: Vi ser här då återigen en utmatning av de tal som det förra programmet skrev ut till filen. Och allt detta har vi åstadkommit utan att använda loopar, både fread() och fwrite() har alltså loopfunktionaliteten inbyggd. Det här fungerar alldeles utmärkt med en array av structar också och är grunden för hur vi kan dumpa ut innehållet i en jättearray av structar i en fil och snabbt och enkelt läsa in innehållet igen. Programmeringsprojekt nr 8 är utmärkt för att exemplifiera detta. Vi rekommenderar verkligen att ni gör det projektet. Det är inte alls svårt, ni kan bygga på exemplet ovan Positionering i filer Då vi läser eller skriver i en fil finns det någonting som kallas filposition. Den hör till strömmen som är öppnad för filen och gör det möjligt för oss att behandla olika delar av filen, vi kan gå fram och tillbaka i filen och läsa eller skriva. Normalt är detta endast för binärfiler, det går för textfiler också men kräver en del specialmanövrar som vi inte ska studera i denna kurs. Det är rent av så att vi inte alls kommer att behöva ändra positionerna i några filer, det kommer troligen att räcka med att bara dumpa ut data (från en jättearray) i en fil i slutet av programmet och sedan stänga den respektive läsa in ett helt filinnehåll i en jättearray i början av programmet. Men vi nämner ändå möjligheten att ändra filpositionen för fullständighetens skull. Det finns fem funktioner för att hantera detta med filpositioner, vi hittar dem om vi skriver man fseek, eller man ftell eller man på någon annan av dem: int fseek(file *stream, long offset, int whence); long ftell(file *stream); void rewind(file *stream); int fgetpos(file *stream, fpos_t *pos); int fsetpos(file *stream, fpos_t *pos); Funktionen ftell() anger nuvarande filposition i form av ett heltal, rewind() sätter filpositionen till början av filen, rewind betyder spola tillbaka. Funktionerna getpos() och setpos() ska vi inte studera i denna kurs, de är för filer som är ohyggligt stora, om ni kommer att använda ohyggligt stora filer någon gång så kan ni gå tillbaka till dem. Det som är kvar att beskriva är då alltså funktionen fseek(). Vi kommer då att studera ett exempel som också kommer att illustrera själva begreppet position i en fil. johnnyp@kth.se Sidan 10 av 11
11 Vi studerar följande exempel: int main(void) FILE *infil, *utfil; int t1,t2,t3,t4,k,s; int skriv_detta; s=sizeof(int); HI1024 Programmering, grundkurs, 8.0 hp, KTH STH, hösten 2012 utfil=fopen("tal1.dat", "wb"); for(skriv_detta=1;skriv_detta<=100;skriv_detta++) fwrite(&skriv_detta,4,1,utfil); fclose(utfil); infil=fopen("tal1.dat","rb"); fread(&t1,s,1,infil); fseek(infil,10*s,seek_set); fread(&t2,s,1,infil); fseek(infil,-20*s,seek_end); fread(&t3,s,1,infil); fseek(infil,2*s,seek_cur); fread(&t4,s,1,infil); fclose(infil); printf("%d %d %d %d\n",t1,t2,t3,t4); En körning: Innehållet i filen är talen 1 till och med 100. I den här diskussionen ska vi låtsas som om en filposition innehåller ett heltal, men i själva verket krävs fyra positioner, fyra bytes, för att rymma ett heltal. Heltalsvariabeln skriv_detta går från 1 till 100 och vi skriver värdet av den in i den ström som är kopplad till den fil vi arbetar med. Första läsningen ger, som vi ser i utskriften, en etta. Det som händer sen är att vi går framåt (med fseek(infil,10*s,seek_set);) och läser ytterligare ett tal, denna läsning sker 10 steg (egentligen 40 steg) framåt och om man går 10 steg framåt hamnar vi på position nr 11 (egentligen position 44), där det står en 11:a. Därav 11:an i utskriften. Då vi i nästa anrop gör fseek(infil,-20*s,seek_end); ställer vi oss alltså 20 steg till vänster (om vi antar att filen börjar till vänster) om slutet, slutpositionen får då uppfattar som 101, eftersom filen har 100 positioner. 20 steg tillbaka ger oss position 81 och det är vad vi ser i nästa utskrift. Då vi läst detta har filpositionen ökats på med 1 (egentligen 4), och då är vi i position 82. När vi då gör fseek(infil,2*s,seek_cur); går vi alltså framåt två steg och hamnar på position 84 som vi ser i sista utskriften Formaterad IO med strängar: Läs själva johnnyp@kth.se Sidan 11 av 11
Föreläsning 13. In- och utmatning
Föreläsning 13 In- och utmatning Dagens kluring Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser
Läs merDeklarera en struct som kan användas för att representera en rät linje
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar en linje som går genom punken (0,2) och
Läs merProgrammering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman
Läs merSträngar. Strängar (forts.)
Strängar En sträng i C är helt enkelt en array av char: char namn[20]; För att få strängar att bete sig som om de vore av dynamisk längd markeras strängens slut med null-tecknet \0 : J o z e f S w i a
Läs merFiler och structer Del 2
Filer och structer Del 2 Agenda: Typedef Alternativ strängläsning från fil Binära data Lagra Läsa Oväntat slut på input Spara till nästa programstart Typedef Kan användas till att sätta ett eget namn på
Läs merFöreläsning 7 Strängar
Föreläsning 7 Strängar I C använder vi strängar för att lagra text. Strängar kommer in ganska sent i kursen, det är jag inte så glad över, men det finns också fördelar, vi har grundat oss rejält nu i funktioner,
Läs merDagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 12 Filhantering Funktionsbibliotek Mer om kompilering Lagrinsklasser Makron Programmeringsteknik VT05 2 Mer om printf Utskrifter
Läs merProgrammering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,
Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1 Tisdagen den 7 juni 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman inom C programmering.
Läs merProgrammering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:
Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk
Läs merPlanering Programmering grundkurs HI1024 HT TIDAA
Planering Programmering grundkurs HI1024 HT 2016 - TIDAA Föreläsning V35 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning
Läs merJohan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen
Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för
Läs merLärare och handledare. Systemnära programmering. I dag. Föreläsningar & Gruppövningar & Handledning. Marcus Karlsson
Lärare och handledare Systemnära programmering 5DV088 HT10 Föreläsningar & Gruppövningar & Handledning Mikael Rännar Handledning mr@cs.umu.se Marcus Karlsson marcusk@cs.umu.se 1 2 I dag Information om
Läs merKTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012
KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny Panrike och
Läs merSpråket Python - Del 2 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Funktioner Filhantering Felhantering 2 Funktioner 3 FUNKTIONER Att dela upp program Att dela upp program i mindre delar, funktioner är ett viktigt koncept i programmering. Viktigt
Läs merPlanering Programmering grundkurs HI1024 HT 2015 - data
Planering Programmering grundkurs HI1024 HT 2015 - data Föreläsning V36 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning
Läs merHI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,
KTH STH TENTAMEN HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011, 8.15-12.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny
Läs merFöreläsning 6 pekare och pekare tillsammans med arrayer
Föreläsning 6 pekare och pekare tillsammans med arrayer Vi ska nu undersöka vad pekare egentligen är och hur de relaterar till arrayer. Det är ett centralt tema i C-programmering. Vi följer boken och går
Läs merÖvning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver
Läs merExempelsamling Assemblerprogrammering
Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 8 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merProgrammering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19
Programmering i C++ EDA623 Strömmar och filer EDA623 (Föreläsning 9) HT 2013 1 / 19 Strömmar och filer Innehåll Klassen ios Läsning av strömmar Utskrift av strömmar Koppling av filer till strömmar Direktaccess
Läs merEnklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut
F5: Filhantering in- och utmatning (kap. 2 och 8) 1 Utskrift på skärm, inläsning från tangentbord (kap. 2) Spara och hämta variabler med save och load (kap. 2) Kommandot textread Mer avancerad filhantering:
Läs merRepetition av filer Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Formattera text 2 3 REPETITION AV FILER Filer på en dator En fil består av en sekvens av digitalt data (ettor och nollor). Upp till program att tolka dessa siffror. Skillnad
Läs merEn kort text om programmering i C.
En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,
Läs merEnkla datatyper minne
Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in
Läs merHI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,
KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny
Läs merAtt skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Läs merMöte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)
Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Som sagt så kommer den här kursen endast innehålla en enda föreläsning och det var förra gången. Från och med nu så kommer vi förutsätta
Läs merAgenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då
Agenda Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer Övningar nu och då 1 Motivering I de flesta problem ingår att hantera multipla data I de
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merProgrammering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012
Programmering, grundkurs, 8.0 hp HI1024, TEN1 Fredagen den 2 mars 2012 Tentamen består av två delar, del A och del B. Del A innehåller 4 kryssfrågor på olika teman inom C programmering. Varje fråga är
Läs merTecken & Strängar. Kapitel 7
Tecken & Strängar Kapitel 7 Datatypen char Alla tecken i teckenuppsättningen Synliga och andra ASCII American Standard Code for Information Interchange Numera 256 tecken (8 bitar (2 8 ) numreras 0..255)
Läs merTentamen i. Programmering i språket C
1 of 8 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering i språket C för D1 m fl, även distanskursen torsdag
Läs merUppgifter till praktiska tentan, del A. (7 / 27)
Uppgifter till praktiska tentan, del A. (7 / 27) I. Sortering/Sökning: III II. Representation/Omvandling/format/protokoll: II III. Strukturering: II I alla problem, där bokstäver förekommer, antar vi att
Läs merDynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar
Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden
Läs merTentamen *:58/ID100V Programmering i C Exempel 3
DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst
Läs mer*Pekarvärden *Pekarvariabler & *
*Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)
Läs merTentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013
1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merHantering av textsträngar och talsträngar. William Sandqvist
Hantering av textsträngar och talsträngar Strängen Hello world! PIC-processorerna lagrar strängkonstanter med bokstäverna inbakade i en följd av instruktioner (en tabell). Man hämtar en bokstav genom att
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Läs merIntroduktion till programmering, hösten 2011
Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merUttryck, satser och strömhantering
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2018-09-06 Mål Uttryck, satser och strömhantering I denna laboration ska du lära dig Formaterad inläsning och utskrift Vanliga repetitions-
Läs merFöreläsning 11. Strängar
Föreläsning 11 Strängar Dagens kluring void findmax(int v[], int length, int *pmax) int i;??=v[0]; for(i=1;i< length;i++) if(v[i]>??)??=v[i]; int main() int a[]=1,2,3,4,2; int max; hittamax(a,5,???); printf(
Läs merLaboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Läs mer5 Grundläggande in- och utmatning
5 Grundläggande in- och utmatning För att användaren skall kunna kommunicera med programmet krävs att man inkluderar ett eller flera bibliotek med rutiner. I Ada finns det ett antal paket som gör detta
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merProgrammeringsteknisk översiktskurs för yrkeshögskoleprogram
Programmeringsteknisk översiktskurs för yrkeshögskoleprogram Föreläsning 12 Våren 2005 Innehåll Palindrom Hur man hittar fel i program, debuggning Felhantering, hur man förhindrar program att krascha Ev.
Läs mer2 Pekare och dynamiska variabler.
2 Pekare och dynamiska variabler. När man definierar en variabel reserverar man samtidigt minne för variabelns värde. Detta minnesutrymme kommer man sedan åt med hjälp av variabelns namn. Definierar man
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 6 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merSammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111
/home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111 0 # coding : latin Sammanfattning Gick igenom listor, dictionary, felhantering, strängjämförelser, split(), rstrip()
Läs merSkriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
Läs merLösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,
Läs merGU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167
GU / Chalmers Campus Lindholmen Tentamen Programutveckling 2016-01-13 LEU 482 / TIG167 Examinator: Henrik Sandklef (0700-909363) Tid för tentamen: 2016-01-13, 08.30 12.30 Ansvarig lärare: Henrik Sandklef,
Läs merLaboration 1 Introduktion till Visual Basic 6.0
Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.
Läs merLaboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Läs merPlanering Programmering grundkurs HI1024 HT 2014
Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att
Läs merLite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output
Programmering hh.se/db2004 Föreläsning 5: Fält samt Input/Output Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Lite mer om Javas stöd för fält Hur många element har ett fält?
Läs merKompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Läs merProgrammera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Läs merTDP002 - Imperativ programmering
TDP002 - Imperativ programmering Strängar och IO Eric Elfving Institutionen för datavetenskap 1 I/O - Inläsning och Utskrift Inläsning Typomvandling Utskrift Strängformatering 2 Teckenkodning 3 Externa
Läs merLösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt
Läs merFöreläsning 10. Pekare (Pointers)
Föreläsning 10 Pekare (Pointers) Dagens kluringar int a=5; int f(int b) a--; b++; return b; int main() int a=3; printf("%d,",f(a)); printf("%d",a); return 0; int f(int a) if(a==1) return a; else return
Läs merInstruktioner för att kunna programmera på skolans datorer
Instruktioner för att kunna programmera på skolans datorer De här instruktionerna är viktiga att känna väl till inför tentamen samt inför laborationsredovisningar. Många av er kommer att använda bärbara
Läs merÖvningsuppgifter till föreläsning 2 Variabler och uttryck
Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 7 Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen fredag 15
Läs merGuido van Robot och olika UNIX-kommandon
Guido van Robot och olika UNIX-kommandon Till denna session är det tänkt att ni ska ha arbetat en del med både UNIX-kommandon och börjat med Guido van Robot. Vi ska nu studera dessa båda saker med hjälp
Läs merPekare och arrayer. Indexering och avreferering
Pekare och arrayer En array är ett sammanhängande minnesområde rymmande ett antal element av en viss typ. Arraynamnet kan ses som adressen till arrayens början, dvs. dess första element. En pekare är en
Läs merkl Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Läs merLösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Omtentamen i Programmering C, Fri, Kväll, 050108.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13.00. Denna tenta kommer att vara färdigrättad Fr 14/1 och kan då hämtas på mitt tjänsterum,
Läs merGrundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2
AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga
Läs merFiler. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19
Filer När ett program behöver spara data för senare användning måste dessa data antingen sparas i en databas eller skrivas på en sekundärminnesfil Sådan skrivning på fil är inte mer komplicerad än att
Läs merOmkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe
In- och utmatning i Unix Program i Unix skriver och läser till och från filer. En fil betyder här en vanlig fil med text eller binära data, ett tangentbord, en skärm, ett annat program etc. Innan ett program
Läs merLaboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Läs merTentamen ges för: Tentamensdatum: Tid:
Programmering E 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: Tentamen TE081B El2 Tentamensdatum: 2012-04-13 Tid: 900 1300 Hjälpmedel: Kursbok Kelley, Pohl: A Book on C, Fourth Edition Tillåtet
Läs mer#include <pthread.h> #include <stdio.h> int p1[2]; void* char_print (void* parameter) { int fds; fds = *((int *)parameter); int i;
Övningar på trådar Det kommer att visa sig att det är mycket enklare att programmera med trådsom pratar med pipes/sockets ar när man en gång bemästrat IPC med processer och pipes/sockets. Vi ska dock formulera
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Strömmar, externa filer och kommandoradsargument Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Översikt 2/32 Strömmar Kommandoradsargument Jämförelseoperatorer
Läs mer4 Sammansatta datatyper
4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara
Läs merC-programmering, föreläsning 1 Jesper Wilhelmsson
C-programmering, föreläsning 1 Jesper Wilhelmsson Introduktion till C Variabler, Typer, Konstanter Operatorer Villkorliga satser if-else, switch Loopar for, while, do... while Inmatning och utmatning stdin
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 6 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merLösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,
Läs merPC-teknik, 5 p LABORATION FILHANTERING
PC-teknik, 5 p LABORATION FILHANTERING Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2004-09-14 Laborant(er): 1 Syfte Laborationen ska illustrera möjligheten att använda funktioner i DOS för att
Läs merProgrammering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
Läs merTextsträngar från/till skärm eller fil
Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,
Läs merHI1024 Programmering, grundkurs TEN
HI1024 Programmering, grundkurs TEN2 2016-12-22 KTH STH Flemingsberg 8.15-13.00 Tillåtna hjälpmedel: Kursboken C PROGRAMMING A Modern Approach K. N. King helt utan anteckningar Alternativt C från början
Läs merTentamen i Programmering grundkurs och Programmering C
1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (Thomas.Padron-McCarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen
Läs merLaboration: Whitebox- och blackboxtesting
Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska
Läs merNågra inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0
Läs mertentaplugg.nu av studenter för studenter
tentaplugg.nu av studenter för studenter Kurskod Kursnamn D0017E Inledande programmering för ingenjörer Datum 2014-10-31 Material Tentamen Kursexaminator Betygsgränser Tentamenspoäng 3 14; 4??; 5?? 25/25
Läs merNumeriska Metoder och Grundläggande Programmering för P1, VT2014
Numeriska Metoder och Grundläggande Programmering för P1, VT2014 Föreläsning 5: Filhantering i Matlab Mer om datatyper: celltabeller, gles lagring (Kap. 7 & 8 i MATLAB Programming for Engineers, S. Chapman)
Läs mer729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer
729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser
Läs merIntroduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
Läs merObjektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6
Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner
Läs merKapitel 5. Strömmar. Utmatning
Kapitel 5 Strömmar Kapitel 5 - Strömmar Utmatning med std::ostream och std::ostringstream Inmatning med std::istream och std::istringstream Överlagring av in- och utmatning Iteratorer för in- och utmatning
Läs merFöreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Läs merOutline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler
Outline Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Vända om inlästa värden Vända om inlästa
Läs merOm pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp().
Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp(). Detta extra material är tänkt att dels fördjupa och förtydliga pekarbegreppet från C och ge
Läs merkl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Läs merOperativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas
Läs mer