void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i<antal;i++) if(tal[i]>??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.

Slides:



Advertisements
Liknande presentationer
Snabbguide och tips.
Advertisements

BAS-M Hur du på ett enkelt sätt administrerar din båtklubbs register.
INTRODUKTION TILL PROGRAMMERING
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Föreläsning1. • Boken?!?! • Vad är ett program? • Kompilerande-Interpreterande • Programmeringsmiljö • Hello World! • Att programmera och ett enkelt program.
hej och välkomna EKVATIONER Ta reda på det okända talet.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Vill du lära dig kort division?
De fundamentala datatyperna
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Att hålla en presentation
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
C-programmering ID120V William Sandqvist Länkad lista
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Repetition inför slutprovet
Pointers. 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; }
Programmering B PHP Lektion 2
Källor! Hur gör man egentligen?
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Tabeller.
Vektorer (klassen Vector) Sortering
Presentation 5 p (kräver närvaro hela lektionen) Fundera under presentationen på hur de olika bakgrunderna fungerar ! SRH.
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.
Helpdesk – 10 i topp.. 2 Glömt anv.namn/lösenord –Användaren har bytt anv.namn/lösen och kommer inte ihåg till vad, eller så har de inte kvar mailet de.
William Sandqvist C:s minnesmodell.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Modulär programutveckling
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
INTRODUKTION TILL PROGRAMMERING
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Hur utvecklas den matematiska förmågan? AV-kurs, Stöd- och hälsoenheten Ur Manual Matematikscreening II (Adler, 2012)
Meningar med bisats När vi skriver texter är det bra att använda bisatser. Det är bra att använda bisatser i meningar av många olika anledningar. Dels.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i<antal;i++) if(tal[i]>??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int storst; hittaMax(v,5,???); printf(“Storsta talet ar: %d",storst); return 0; }

• Litteraler • Hur lagras strängar • Initialisering • Skriva ut och läsa in strängar • Enskillda tecken i sträng • • Array av strängar • Sortering av strängar

• Litteral – ett konkret värde som en variabel kan anta, kallas ibland konstanter • Exempel:char:’e’ int:23 double:5.7e2 • Text representeras i c med strängar. För strängar har vi använt litteraler för att skicka till printf sedan kursens början. Exempel: ”Hej pa er!\n Hur mar ni?\n” • En stränglitteral består som synes av flera char-litteraler (vilket vi också kallar tecken)

• I stränglitteraler kan man kan man inkludera charlitteraler som är escape-sekvenser för att åstadkomma olika saker: \ager ett litet beep \\ skriver ut \ \nny rad \ttab \”skriver ut ” • Tabell 7.5 på sid 137 ger alla escape-sekvenser

• Om ’a’ är en litteral till typen char. Vad är då typen för strängar? Till skillnad från de flesta programmeringsspråk saknar C en egen typ för strängar. • Strängar lagras istället som en array av char som avslutas med nulltecknet ’\0’ • Exempel ”hej” lagras som [’h’|’e’|’j’|’\0’] och kräver alltså en array med längden minst 4 för att få plats! • Den får lagras i en array som är längre och då får det vara vad som helst efter nulltecknet. Ex: [’h’|’e’|’j’|’\0’|’k’|’a’] • Om nulltecknet saknas är det ingen sträng utan en array av char och inga inbyggda funktioner för strängar kommer att fungera förutsägbart! • Kom ihåg att char egentligen är heltal som tolkas som tecken vid t.ex. %c. ’\0’ har heltalsvärdet 0 vilket ibland används

• Även om strängar saknar en egen typ finns det inbyggt stöd för strängar. T.ex. behöver vi inte (men kan) initialisera en sträng såsom: char s[8]={'h','e','j','\0'}; utan kan skriva: char s[8]="hej"; • Observera behovet av plats för ’\0’ char s[3]="hej"; printf("%s",s); kommer inte att lagra ’\0’ och printf kommer fortsätta att skriva slumpmässiga tecken till den stöter på en byte som är 0. • Vi kan istället låta kompilatorn beräkna längden: char s[] = ”hej”;

• Vi kan enkelt skriva ut strängar med printf: char s[]="hej"; printf("%s",s); • Eller ännu enklare med puts: char s[]="hej"; puts(s);//skriver ut strängen s och gör sedan ny rad • Med printf kan vi inkuldera strängar i strängar: char namn[]="Nicklas"; printf("Hej %s\n",namn);

• Att läsa in strängar kan vid första anblicken verka lika enkelt som att skriva ut men innehåller en hel del komplikationer: • Vid vilket tecken ska vi sluta läsa? Mellanslag, ny rad, tab? • Vad gör vi med tecken som är kvar när vi läst färdigt? Lämnar kvar eller slänger bort? • Vad gör vi om input vi läser inte får plats i arrayen vi läser till? • Enklast att använda är scanf och gets. De är båda livsfarliga eftersom de inte har någon aning om hur lång array de skriver till och kommer fortsätta skriva rätt ut i minnet om input är för långt. Vi kommer ändå använda dessa initialt men kom ihåg problematiken!

int main() { char s[10]; scanf("%s",s); printf("%s",s); return 0; } • Observera att vi inte ska använda & i scanf då s är en array och detta redan är en pekare! Jämför med: scanf(”%d”,&tal); • scanf skippar först alla ”white spaces” läser sedan tecken tills den stöter på ”white spaces”. ”white spaces” är ett samlingsnamn för bl.a. mellanslag, tab och ny rad. Detta gör att scanf inte kan användas för att läsa en hel mening. Skriver vi ”hej pa dig” läses endast ”hej” • Alla tecken som är kvar lämnas kvar på inputströmmen och kommer att läsas av nästa försök att läsa. Detta kan ställa till problem! char s1[100]; char ch; printf("Skriv in strang:"); scanf("%s",s1); printf("Skriv in char:"); scanf("%c",&ch);//när vi kör läses här return och vi får ingen chans att skriva!

char s1[100]; char ch; printf("Skriv in strang:"); gets(s1); printf("Skriv in char:"); scanf("%c",&ch); • gets läser allt tills den kommer till ’\n’ inklusive ”white spaces”. Den tar bort ’\n’ från inputströmmen men lägger inte in den i arrayen utan byter den mot ’\0’.

• För att inte riskera att läsa in mer än som får plats kan man använda fgets istället som vi kommer att titta närmare på senare. • Vill man ha full kontroll över hur inläsningen av strängar sker skriver man ofta en egen inläsningsfunktion. Boken har ett exempel på sid 287: int readLine(char s[], int n) { int ch, i=0; while((ch=getchar())!='\n') if(i<n) s[i++]=ch; s[i]='\0'; return i; } //Denna läser maximalt n tecken så s måste ha n+1 platser!

• Eftersom en sträng är en array tecken med ’\0’ sist kan vi enkelt nå godtyckligt tecken: char s[]="Hej pa dig"; char tecken5 = s[4];//tecken5 blir ’p’ • Här är en funktion (sid 287) som räknar mellanslag i en sträng: int countSpaces(char s[]){ int count=0,i; for(i=0;s[i]!='\0';i++) if(s[i]==' ') count++; return count; } • Observera att vi till strängar inte behöver skicka längden men också hur viktigt det är att de avslutas med ’\0’!

• Det mesta av C’s stöd för stränghantering finns i standardbiblioteket string.h. Behöver du göra något med strängar så leta här. Vilka som ska ingå i C-standarden kan du läsa i 23.6 men dessutom har många miljöer extra funktioner. • När du ska använda en biblioteksfunktion som du inte använt förut i ett program börjar du med att läsa dokumentationen. Sedan skriver du ett litet testprogram för att se om det fungerar som du förstått. Först därefter provar du att använda funktionen i ditt program • Glöm inte att högst upp inkludera headern: #include

• För att ta reda på längden hos en sträng loopar man enkelt igenom strängen räknande antal varv tills man hittar ’\0’ liknande funktionen som räknade mellanslag. • Dock finns en sådan färdig i string.h: char s[]="Hej pa dig"; int antal=strlen(s); • Den returnerar strängens längd inte arrayens. Arrayen kan vara mycket längre. ’\0’ räknas inte heller till strängen utan bara tecknen i strängen. • Om man läser dokumentationen för strlen i boken eller i unix med kommandot: man strlen eller på nätet ser man funktionsprototypen: size_t strlen(const char *s) Här stöter vi då på en del saker vi inte helt behärskar. Det gäller då att försöka förstå tillräckligt och sedan pröva till dess att ni är fullärda. Den returnerar size_t som är en definierad typ men vi kan hantera den som en int. const betyder att arrayen inte får ändras av funktionen. Den vill ha en pekare men en array skickas som pekare till funktioner.

• Vi kan initiera en sträng enligt: char s[]="Hej pa dig"; • Men inte tilldela enligt: char s[20]; s="Hej pa dig";//kompileringsfel! • Inte heller går det att kopiera strängar med = char s1[20]="Hej pa dig"; char s2[20]; s2=s1;//kompileringsfel -vilket ju inte går med arrayer generellt! • Man måste helt enkelt loopa igenom arrayerna och kopiera tecken för tecken. Även här finns en färdig funktion i string.h: int main(){ char s1[20]="Hej pa dig"; char s2[20]; strcpy(s2,s1);//kopierar strängen i s1 till s2 OBS vårt ansvar att s2 är tillräckligt stor printf("%s",s2); return 0;} • Vi kan också kopiera in litteraler: strcpy(s1,”Hej”);

• För att sätta ihop strängar använder vi strcat: char s1[20],s2[20]; strcpy(s1,"samman"); strcpy(s2,"slagning"); strcat(s1,s2);//s1 innehåller nu “sammanslagning” printf("%s",s1); • Som vanlig är det vårt ansvar att vi får plats

• Inte heller == fungerar mellan strängar istället har vi: strcmp(s1,s2) som returnerar ett heltal som är mindre än noll lika med noll eller större än noll beroende om s1 kommer före lika eller efter alfabetiskt (enligt ascii) • strcmp(s1,s2)<0 returnerar 1 om s1 är före s2 strcmp(s1,s2)==0 returnerar 1 om s1 är lika med s2 vilket kan användas i en if-sats för sortering eller jämförelser

#include #define MAX 100 #define WORDLENGTH 30 int main() { char ordbok[MAX][WORDLENGTH+1]; int i,antal=10; for(i=0;i<antal;i++) { printf("Skriv in ett ord:"); gets(ordbok[i]); } for(i=0;i<antal;i++) { printf("%s\n",ordbok[i]); } return 0; }

#include #define MAX 100 #define WORDLENGTH 30 void sortera(char lista[][WORDLENGTH+1],int langd) { } int main() { char ordbok[MAX][WORDLENGTH+1]; int i,antal=10; … sortera(ordbok,antal); … return 0; }

• Iden här är att skriva en funktion som sorterar en array av strängar och anropa den innan orden skrivs ut i exemplet innan. • Gå tillbaka till föreläsning 4 och repetera sortering och försök sedan att tillämpa det på strängar med hjälp av vad vi lärt oss idag. • Försök först själv men om du kör fast kan du titta vidare på dagens föreläsning efter läsanvisningen för att få hjälp på vägen. Det är dock viktigt att du först försöker själv för att du verkligen ska förstå detta mycket viktiga exempel.

• Gå igenom föreläsningen och programmera exemplen, glöm inte och experimentera med koden. • Försök fixa sorteringsfunktionen till vår array (hjälp finns efter denna sida men försök utan) • Läs igenom • Hade du svårt med sorteringsfunktionen och/eller använde mycket hjälp gör K13 P1 • Skriv en egen funktion som returnerar längden av en sträng. • Om du läst kapitel 12 och står ut med det myckna användandet av pekare är det kul och nyttigt att läsa igenom 13.6 och programmera exemplen. E-excercises, P-programming projects

#include #define MAX 100 #define WORDLENGTH 30 void sortera(char lista[][WORDLENGTH+1],int langd) { } int main() { char ordbok[MAX][WORDLENGTH+1]; int i,antal=10; for(i=0;i<antal;i++) { printf("Skriv in ett ord:"); gets(ordbok[i]); } sortera(ordbok,antal); for(i=0;i<antal;i++) { printf("%s\n",ordbok[i]); } return 0; }

void sortera(char lista[][WORDLENGTH+1],int langd) { int i,j,tmp; for(i=0;i<langd-1;i++) { for(j=0;j<langd-1-i;j++) { if(strcmp(lista[j],lista[j+1])>0)//om sant är de i fel ordning { byt(lista[j],lista[j+1]); }

void byt(char s1[], char s2[]) { char tmp[WORDLENGTH+1]; strcpy(tmp,s1); strcpy(s1,s2); strcpy(s2,tmp); }