Dagens problem. Tal på fil. Förvandla heltal till sträng. Dialog

Relevanta dokument
Kursnamn Kurstid Datum och starttid Ort Brandskyddsutbildning 3 timmar :00:00 Alingsås Brandskyddsutbildning 3 timmar

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Fredagen 14 januari Tentamen består av 8 sidor

Belopp Belopp > procent

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Detta är andra problemlösningsföreläsningen, vi diskuterar problemen ur Problem II.

Enkla uppgifter. Uppgift 1. Uppgift 2

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 13:15-18:15. Tisdagen 26 april Tentamen består av 8 sidor

HKI - Holmbergs kommunindex och KPNI - kommunpolitiskt nöjdhetsindex Sören Holmberg

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

Programmering Grundkurs (HI1900) Teoridel

Tingsrätt Jan-09 Feb-09 Mar-09 Apr-09 May-09

Bokningsstatus - lediga provtider, körprov behörighet A (motorcykel), på Trafikverket Förarprov

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Anpassning Betyg/ poäng. upplägg och genomförande Betyg/ poäng

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Uppgifter att lösa 1,1,2,3,5,8,13,21...

Välkomna till Göteborg

Lönejämförelse från till

Upphandling Organisation Organisationsnummer Postadress Pris Slutpoäng Område 1 Stockholm AcadeMedia Eductus AB GÖTEBORG ,875 Område

Uppgifter till praktiska tentan, del A. (7 / 27)

Tecken & Strängar. Kapitel 7

1,3,5,7,9,...,99. Skriv ett program som genererar en multiplikationstabell med följande utseende

Bokningsstatus - lediga provtider, körprov utökad B (kod 96), på Trafikverket Förarprov

Korpen Svenska Fokus Korpen 2025 Remissen

Individual Accommodation

Landsting/region Andel avlidna, % Hjärnblödning Hjärninfarkt Alla

Comenius fortbildning omg 2, april 2012

Kompletterande uppgifter / rättelser? Kontakta Magnus Lindell eller limag@bredband.net

Bokningsstatus - lediga provtider, körprov behörighet B (personbil), på Trafikverket Förarprov

1 Sifferkryss 21,15,9,22,15,8. i vårt exempel. Programmet ska i en tabell skriva ut de 9 talen, som för vårt exempel ger. Håkan Strömberg 1 KTH STH

Bokningsstatus - lediga provtider, körprov behörighet B (personbil), på Trafikverket Förarprov

Saflok - En enkel och säker konstruktion

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 8:15-13:15. Onsdagen 10 juni Tentamen består av 8 sidor

En kort text om programmering i C.

Medelålder och andel patienter som inte var medvetandesänkta vid ankomst till sjukhus.

TRRs metodik för uppsagda baseras på: Nuläge

Utvärdering. PR-värde Uddevalla Solid Sound 2014/2015

Bokningsstatus - lediga provtider, körprov behörighet B (personbil), på Trafikverket Förarprov

WEBBTABELLER. Webbtabellerna finns på Riks-Strokes hemsida ( flik Årsapporter): Webbtabell 1

ST inom Försäkringskassan Avdelning 102

TentamensTräning. Läsanvisningar

Bokningsstatus - lediga provtider, körprov behörighet B (personbil), på Trafikverket Förarprov

BLEKINGE TINGSRÄTT , DOMSTOLSHANDLÄGGARE ,

Bokningsstatus - lediga provtider, körprov behörighet B (personbil), på Trafikverket Förarprov

Stödpedagoger inom yrkeshögskolan

Kiruna. Gällivare. Piteå Storuman. Skellefteå Lycksele. Tåsjö Vännäs Umeå. Örnsköldsvik. Östersund Sollefteå. Härnösand

BRF-RESPONS ST LOKALA KARTLÄGGNINGAR FÖR ÖKAD FÖRSÄLJNING

Arbetsmiljö våren

Andel avlidna bland de som insjuknat i hjärnblödning, %

BRF-RESPONS ST LOKALA KARTLÄGGNINGAR FÖR ÖKAD FÖRSÄLJNING

Tillgång till grönytor/grönområden i och omkring tätorter

SVERIGES STÖRSTA FÖRENINGAR! BRF-RESPONS ST LOKALA KARTLÄGGNINGAR FÖR ÖKAD FÖRSÄLJNING

Andel beh. inom 3 tim. %

Sida 1 av 8. Barn berörda av verkställd avhysning, jan-mars 2013 Källa: Kronofogden

PRESENTATION AUDIO VIDEO UTRUSTNING FRÅN TILLBEHÖR TILL HELHETSLÖSNINGAR AUDIO VIDEO UTRUSTNING

Utfall per myndighet. Alingsås tingsrätt 2, Domstolshandläggare

DALSLANDSRING Idéskiss

Utfall och medellön för resp domstol och kategori

DITT SJÄLVKLARA VAL EN LITE NÄRMARE SLANGSERVICE. HYDROSCAND - EN LITE NÄRMARE SLANGSERVICE PRODUKTKATALOG WEBB

Riktad Indragning. Utsändes till: Distributör (även pdf) Apoteket AB (även pdf) Läkemedelsverket (även pdf) I övrigt se sändlista sid 2

Radioundersökningar. Rapport II TNS Sifo. Radioundersökningar

Andel behöriga lärare

Prisblad 2013 Foajéyta SF Bio

PENDLINGSBARA SVERIGE 2015

UPPGIFT 1 LAMELLER. Minsta antalet hål: 1. Första lamellen? Andra lamellen? Minsta antalet hål: 3

Att utbilda för jobb.

Samarbete mellan Svensk Bowling och ICA MAXI

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Dahl eshop. många smarta funktioner

Byggnet Viewer Version Oktober

BRF-RESPONS st lokala kartläggningar för ökad försäljning

STATLIGT RAMAVTAL MÖBLER & INREDNING OMR D AKUSTIK- & SKÄRMSYSTEM

Föreläsning 9. Repetition och exempelproblem

Version April TRYCKGUIDE för bästa digitala underlag

Exempel på organisering av psykosocialt krisstöd

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

FOKUSERA AB. 22 % rabatt ska dras av på angivna priser. 1 STATLIGT RAMAVTAL - MÖBLER & INREDNING. Fokusera - Produktlista nr 1

Deltagande team, fördelade per genombrottsprogram, i Bättre vård mindre tvång

Statlig cykelpolitik

Skyltade stråk. Detaljkartor. Sevärdheter. Turförslag. Turistleder. Trafikinfo

MANAGEMENT SYSTEM CERTIFICATE

MANAGEMENT SYSTEM CERTIFICATE

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Comenius fortbildning, april 2013

Cykeln och hållbar stadsutveckling

TENTAMEN. Programmering Grundkurs (HI1900) Skrivtid 8:15-13:15 Tisdagen 13 januari Tentamen består av 8 sidor

Pizzafavoriter i Sverige 2011, fem-i-topp

Medelålder och andel patienter som inte var medvetandesänkta vid ankomst till sjukhus.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Kursutbud våren

Krydda med siffror Smaka på kartan

Så mycket har bostadsrättspriserna ökat kommun för kommun

Radioundersökningar. Rapport III TNS Sifo. Radioundersökningar

Kiruna KUV Motala Norrköping Nyköping. Sala. Välkommen! Sundsvall Söderhamn. Umeå Uppsala

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Extratjänster katapult ut i arbetslivet eller rekyl in i fortsatt stöd från samhället?

Nyckeltalens utveckling

Byggnet Viewer Version Juni

Transkript:

Dagens problem Tal på fil På filen tal.txt finns ett antal tal. Man vill nu veta hur många av talen som är större än 100. Filen inleds med ett tal som anger hur många tal filen innehåller. Eftersom filen inte finns, måste vi först skapa den i ett eget program, genom att slumpa fram ett antal tal. För detta tänker vi oss följande dialog Hur många tal? 1000 Undre gräns? 72 Övre gräns? 112 Programmet ska alltså skapa en fil som innehåller 1000 tal i intervallet [72,112] Förvandla heltal till sträng Skriv ett program med följande dialog Ge mig ett tal? 123456 Talet är 123456 Ett enkelt program eller hur? Problemet är att då programmet tar emot talet är det i form av en int. När talet skrivs ut är det i form av en sträng (char)! Det finns en funktion, itoa (integer to ascii) som fixar detta, men här ska vi försöka ordna detta utan att använda den funktionen. En anledning är att itoa inte tillhör ANSI C. En annan anledning är att det är bra träning. Dialog Skriv ett program som startar med att fråga Vill du fortsätta? Om svaret blir ja,ja,ja eller JA ska detta upplevas som ett att man vill fortsätta och då ska programmet skriva ut Trevligt. Om svaret blir Nej eller nej skrivet med någon annan kombination av stora och små bokstäver av ordet nej ska programmet skriva ut Det var tråkigt. För alla andra svar ska programmet åter fråga Vill du fortsätta? efter att först ha skrivit ut Svara JA eller NEJ. Håkan Strömberg 1 STH KTH

Vad heter du? Skriv ett program med följande dialog: Vad heter du? Håkan Strömberg Hej Strömberg, får jag kalla dig Håkan? Vi läser in namnet med gets och tänker oss att det endast finns ett mellanslag, det mellan för- och efternamn och inga andra mellanslag. Ordlistan På filen 4ord.txt finns ett stort antal svenska ord, alla fyra bokstäver långa. På filen frågeord.txt finns ett mindre antal ord, också med fyra bokstäver. Skriv ett program som tar reda på vilka ord i den senare filen som kan återfinnas i den större. Exempel på utskrift besk finns svid finns satt finns tror finns ej grrr finns ej höst finns vårt finns ej vitt finns blev finns ej matt finns Håkan Strömberg 2 STH KTH

Avstånd mellan svenska städer Filen avstand.txt innehåller data som gör det möjligt att bestämma avståndet mellan en del svenska städer. Skriv ett program som inleder med att skriva ut en tabell över ingående städer och därefter tar emot numren på de städer mellan vilka man är intresserad av avståndet. Ett körningsexempel: 1 Falun 2 Gävle 3 Göteborg 4 Halmstad 5 Helsingborg 6 Jönköping 7 Kalmar 8 Karlskrona 9 Karlstad 10 Kristianstad 11 Linköping 12 Luleå 13 Malmö 14 Motala 15 Norrköping 16 Nyköping 17 Skellefteå 18 Stockholm 19 Sundsvall 20 Trelleborg 21 Umeå 22 Uppsala 23 Vänersborg 24 Västervik 25 Västerås 26 Växjö 27 Örebro 28 Örnsköldsvik 29 Östersund Från vilken stad (nr): 18 Till vilken stad (nr): 5 Avståndet mellan Stockholm och Helsingborg är 564 km Filen avstand.txt inleds med ett tal n < 50 som anger hur många städer den innehåller. Därefter kommer n rader med ett stadsnamn på varje (endast bokstäver, < 20 stycken). På följande n rader finns n avstånd, heltal som anger avståndet i km. På den i:e raden anger det j:e talet avståndet mellan stad i och stad j. Vokaler På filen ORD.DAT finns ett antal svenska ord alla fyrbokstaviga med enbart små bokstäver. Skriv ett program som räknar antalet ord med 0(!), 1, 2, 3 respektive 4(!) vokaler. Utskriften kommer att se ut som nedan: 0 vokaler 2 1 vokaler 1451 2 vokaler 1070 3 vokaler 13 4 vokaler 0 Till vokaler räknas bokstäverna a, e, i, o, u, y, å, ä och ö. Håkan Strömberg 3 STH KTH

Ett kortare ord Skriv ett program som tar emot ett ord bestående av fem bokstäver (a-z) och som tar reda på och skriver ut de fyrbokstaviga ord som kan bildas genom att ta bort en bokstav ur det ursprungliga ordet. Endast de fyrbokstaviga ord som finns i den medskickade filen, ord.txt godkänns. Ett testexempel Vilket ord (5 bokstäver, a-z): lekar ekar leka Filen ord.txt inleds med ett tal som anger antalet ord i filen och därefter lika många rader med ett ord på varje. Inuti rektanglarna Skriv ett program som avgör om givna punkter ligger inuti en, två eller ingen av två givna rektanglar. På filen REKTANG.DAT finns beskrivning av två rektanglar genom (x 1,y 1 ) det övre vänstra hörnet och (x 2,y 2 ), det nedre högra två rader med fyra tal i nämnd ordning. Den första raden beskriver rektangeln A och den andra B. Därefter följer en rad med ett tal, som anger för hur många punkter, n, testen ska göras. Filen avslutas sedan med n rader. Varje rad innehåller x- och y-koordinat för en punkt. Programmet ska producera en lista med punkternas koordinater, samt passande text: Ligger i båda Ligger endast i A Ligger endast i B Ligger inte i någon Alla tal i denna uppgift är heltal. En punkt som ligger på periferin (på linjen) till en rektangel betraktas som den ligger i rektangeln. Testfilen ska ge följande utskrift: 2 1 Ligger inte i någon 9 2 Ligger endast i A 8 7 Ligger i båda 5 8 Ligger i båda 12 8 Ligger endast i B Håkan Strömberg 4 STH KTH

Ord med wild cards På filen ORD.TXT finns ett antal ord med sex bokstäver. Hur många, anges som första rad i filen. Vi önskar ett program som listar ord ingående i filen som överensstämmer med det ord, inklusive wild cards (jokrar), som anges i indata (endast små bokstäver). Programmet ska söka upp ord i filen som innehåller samma bokstäver på samma platser som sökordet. En asterisk i en position i sökordet kan dock ersättas med vilken bokstav som helst i ordet från filen. Ett testexempel förklarar: Sökord: nu***a numera nutida Det finns 2 ord Programkörningen ska avslutas med en rapport som talar om hur många ord som återfunnits. Håkan Strömberg 5 STH KTH

Lösningsförslag Tal på fil Först skapar vi filen #include <stdlib.h> #include <time.h> FILE *fil; int i,n,ug,og,tal; fil=fopen("tal.txt","wt"); printf("hur många tal? "); scanf("%d",&n); printf("undre gräns? "); scanf("%d",&ug); printf("övre gräns? "); scanf("%d",&og); fprintf(fil,"%d\n",n); for(i=1;i<=n;i++){ tal=rand()%(og-ug+1)+ug; fprintf(fil,"%d\n",tal); fclose(fil); Sedan tar vi rätt på svaret: include <stdio.h> #include <conio.h> FILE *infil; int n=0,i,tal,antal; infil=fopen("tal.txt","rt"); fscanf(infil,"%d",&antal); for(i=1;i<=antal;i++){ fscanf(infil,"%d",&tal); if(tal>100) n++; printf("%d tal är >100\n",n); Håkan Strömberg 6 STH KTH

Förvandla heltal till sträng #include <string.h> int main(void) { char svar[4]; int i,ok=0; do { printf("vill du fortsätta? "); scanf("%s",svar); for (i=0;i<=strlen(svar)-1;i++) if (svar[i]>= a && svar[i]<= z ) svar[i]=svar[i]-32; if (strcmp(svar,"ja")==0) { printf("trevligt\n"); ok=1; else if (strcmp(svar,"nej")==0) { printf("det var tråkigt\n"); ok=1; else printf("svara JA eller NEJ\n"); while (!ok); Dialog #include <string.h> char namn[20],fornamn[10],efternamn[10]; int i,p; printf("ditt namn? "); gets(namn); for(i=0;i<strlen(namn);i++) if(namn[i]== ) p=i; for(i=0;i<p;i++) fornamn[i]=namn[i]; fornamn[p]= \0 ; for(i=p+1;i<strlen(namn);i++) efternamn[i-(p+1)]=namn[i]; efternamn[strlen(namn)-(p+1)]= \0 ; printf("hej %s får jag kalla dig %s\n",efternamn,fornamn); Håkan Strömberg 7 STH KTH

Vad heter du? #include <string.h> int main(void) { char namn[20],fornamn[10],efternamn[10]; int i,p; printf("ditt namn? "); gets(namn); for (i=0;i<strlen(namn);i++) if (namn[i]== ) p=i; for (i=0;i<p;i++) fornamn[i]=namn[i]; fornamn[p]= \0 ; for (i=p+1;i<strlen(namn);i++) efternamn[i-(p+1)]=namn[i]; efternamn[strlen(namn)-(p+1)]= \0 ; printf("hej %s får jag kalla dig %s\n",efternamn,fornamn); Ordlistan FILE *fil1,*fil2; char ord1[5],ord2[5]; int ord,antal1,antal2,f,i; fil1=fopen("4ord.txt","rt"); fscanf(fil1,"%d",&antal1); fil2=fopen("frågeord.txt","rt"); fscanf(fil2,"%d",&antal2); for(ord=1;ord<=antal2;ord++){ fscanf(fil2,"%s",ord2); rewind(fil1); f=0; for(i=1;i<=antal1;i++){ fscanf(fil1,"%s",ord1); if(strcmp(ord1,ord2)==0){ printf("%s finns\n",ord2); f=1; break; if(f==0) printf("%s finns inte\n",ord2); Håkan Strömberg 8 STH KTH

Avstånd mellan svenska städer FILE *fil,*utfil; int antal,i,j,fran,till,avst; char namnen[50][20]; fil=fopen("avstand.txt","rt"); fscanf(fil,"%d",&antal); for(i=1;i<=antal;i++) fscanf(fil,"%s",namnen[i]); printf("från vilken stad (nr): "); scanf("%d",&fran); printf("till vilken stad (nr): "); scanf("%d",&till); for(i=1;i<fran;i++) for(j=1;j<=antal;j++) fscanf(fil,"%d",&avst); for(i=1;i<=till;i++) fscanf(fil,"%d",&avst); printf("avståndet mellan %s och %s är %d km\n", namnen[fran],namnen[till],avst); fclose(fil); Håkan Strömberg 9 STH KTH

Vokaler FILE *infil; char ord[5]; int k,n[5],antal,m; char v[]="aeiouyåäö"; for(k=0;k<=4;k++) n[k]=0; infil=fopen("ord.txt","rt"); while (!feof(infil)){ fscanf(infil,"%s",ord); if (infil>0){ antal=0; for(k=0;k<=3;k++) for(m=0;m<=8;m++) if (ord[k]==v[m]) antal++; n[antal]++; fclose(infil); for(k=0;k<=4;k++){ printf("%d vokaler i %5d fall\n",k,n[k]); Håkan Strömberg 10 STH KTH

Ett kortare ord #include <string.h> char ord[6],filord[5],nyttord[5]; FILE *fil; int antal,k,n,l,i; printf("vilket ord (5 bokstäver, a-z): "); scanf("%s",ord); fil=fopen("ord.txt","rt"); fscanf(fil,"%d",&antal); for(k=1;k<=antal;k++){ fscanf(fil,"%s\n",filord); for(i=0;i<=4;i++){ n=-1; for(l=0;l<=4;l++) if (l!=i){ n++; nyttord[n]=ord[l]; nyttord[4]= \0 ; if (strcmp(nyttord,filord)==0) printf("%s\n",filord); Håkan Strömberg 11 STH KTH

Inuti rektanglarna FILE *infil; int horn[8],antal,k,f1,f2,x,y; infil=fopen("rektang.dat","rt"); for(k=0;k<8;k++) fscanf(infil,"%d",&horn[k]); fscanf(infil,"%d",&antal); for(k=1;k<=antal;k++){ fscanf(infil,"%d %d",&x,&y); f1=0; f2=0; f1=x>=horn[0] && x<=horn[2] && y>=horn[3] && y<=horn[1]; f2=x>=horn[4] && x<=horn[6] && y>=horn[7] && y<=horn[5]; printf("%2d %2d ",x,y); if(f1 && f2) printf("ligger i båda\n"); if(f1 &&!f2) printf("ligger endast i A\n"); if(!f1 && f2) printf("ligger endast i B\n"); if(!f1 &&!f2) printf("ligger inte i någon\n"); fclose(infil); Håkan Strömberg 12 STH KTH

Ord med wild cards FILE *fil; char ord[7],sokord[7]; int antal,funna=0,i,j,n; fil=fopen("ord.txt","rt"); fscanf(fil,"%d",&antal); printf("sökord: "); scanf("%s",sokord); for(i=1;i<=antal;i++){ fscanf(fil,"%s",ord); n=0; for(j=0;j<=5;j++) if(sokord[j]== * sokord[j]==ord[j]) n++; if(n==6){ printf("%s\n",ord); funna++; fclose(fil); printf("det finns %d ord\n",funna); Håkan Strömberg 13 STH KTH