Datorlära 6 Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv 1
Arbeta med Strängar Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str= en text straeng ;!!>> str= en text straeng ;! Stora och små bokstäver skiljer sig åt. Kan vara problem med svenska bokstäver. Stränger kan också ses som vektorer av tecken, tex: >> str(1)! e! >> str(4)! t! 1:10 eller m:n betecknar alla heltal mellan m och n >> str(1:7)! en text! För att få längden för en vektor eller en sträng skriven man length(str)! 2
Övning 1 Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str= en text straeng ;! I ett program skapa en for slinga som skriver ut för varje upprepning i tecknet nummer i i strängen. Kom ihåg: length(vektor) returnerar längden för en vektor. Analysera programmet tillsammans! 3
Att slå ihop strängar (1) Man kan slå ihop strängar för att bygga kortare meningar!>> huvud_str1= [ Hej paa dig ];!!>> disp(huvud_str1);! Resultat:! Hejpaa dig! Eller!>> huvud_str1= [ Hej paa dig ];! >> disp(huvud_str2);! Resultat:! Hej paa dig! 4
Förvandla tal till sträng Sträng och tal är två olika typer av DATA. Det finns 3.14159 ett tal, eller 3.14159 en sträng Beroende på om det är en sträng eller ett tal kan man tillämpa olika funktion. Tal: +,-,/,*.. Sträng: length, slå ihop, osv. Ett tal kan konverteras till en sträng mha fördefinierade funktionen: num2str! Till exempel, man kommer ihåg att konstanten pi är fördefinierad. >> str=[ The number pi is equal to num2str(pi)];! >> disp(str);! The number pi is equal to 3.1416! 5
En annan möjlighet!>> str1 = Du har ;!!>> str2 = kronor paa kontot ;! strängar!>> belopp = 1100;! Tal (inga citationstecken)!>> mening = [str1 num2str(belopp) str2];!!>> disp(mening);! Resultat:! Du har 1100 kronoer paa kontot! Tal måste förvandlas till sträng innan den läggs ihop med andra stängar. 6
Enkel Inmatning av Tal Funktionen input används för enkel inmatning av tal eller strängar (beroende på hur den används) Inmatning av tal: >> x = input( Ange ett tal : );! Vad händer då? Octave skriver ut i workspace: Ange ett tal : Och väntar på att man matar in ett tal och sedan slår return. Värdet man matar in lagras i variabeln x. Så att om man gör: Prova själva! 7 disp(x);! Får man tillbaka talet som matades in.
Övning 2 Skriv ett program som: 1. Frågar efter ett tal Ange ett tal :! 2. Räknar kvadraten 3. Skriver ut resultatet, tex 10 i kvadrat aer lika med 100! 8
Enkel Inmatning av strängar För inmatning av strängar använder man samma funktiom input, men men med en annan syntax. Inmatning av text: >> text = input( Ange en straeng :, s );! berätta för Octave att det som läses in ska tolkas som en sträng text här är nu en variabel av typ sträng, i stället för tal. Vad händer när skriver detta i workspace: Ange en straeng : Och väntar på att man matar in en text sträng och sedan slår return. Värdet man matar in lagras i variabeln text. Så att om man gör: disp(text);! Får man tillbaka talet som matades in. 9 Datorlära 7 FK2002 HT2011
Övning 3 Skriv ett litet program namn.m som: 1. Frågar efter ett namn Vad heter du?! 2. Bygger en ny sträng som innehåller en hälsningsfras med namnet. 3. Skriver ut resultatet, tex Hej Krille!! 10 Datorlära 7 FK2002 HT2011
Några Råd för att Programmera Kommentera ordentligt mha % Använd alltid.m för Octave program och.dat eller.txt för din data, så att man vet vad det är för typ av fil. Använd tydliga namn för variabler (undvik i, j, k!) Använd clear all i början av dina program för att rensa ut från tidigare försök. Octave hittar inte mitt program: Är jag i rätt katalog? Har jag talat om för Octave om sökvägen till katalogen med mitt program (kommer ihåg setmypath.m?) Har jag använt en variabel vars namn är samma som mitt program? (Att undvika!) 11
Några Råd för att Programmera (2) När man får problem med en variabel: Är den definierad? Har en vektor några element eller är den tom? Använder jag rätt datatyp? (sträng, ett tal, en fil, en vektor, en matris) Har variabeln i funktionsargument rätt datatyp? Hjälp om hur funktioner används med help function! Parenteser () används bara för funktioner och hämta element från en vektor Hakparenteser [] används för att konstruera strängar, vektorer och matriser, INTE för funktioner, inte för att hämta element från en vektor. 12
13 Tillbakablick: if-satser
Tillbakablick: Funktioner Endast en funktion får definieras i filen. argumentet värdet / värden, här en vektor returvärdet värdet måste finnas i en fil: medel.m! funktion definition, kan vara många rader. alla variabler här är lokalla. res är en lokal variabel som endast är definierad inom fuktionen. 14 Datorlära 3 FK2002 HT2013
Övning 4 Vi vill skapa ett användarvänligt program som kontrollera om ett tal är delbart med ett annat tal och att det ska se ut så här: Hej och välkommen till programmet "är delbart med". Programmet kan kontrollera om ett tal T är delbart med D. Ange talet T : Ange talet D : 13 är inte delbart med 7 men: 13 = 1 x 7 + 6 ELLER 12 är delbart med 2 : 12 = 2 x 6 15
Hej och välkommen till programmet "är delbart med". utskrifter med disp! Programmet kan kontrollera om ett tal T är delbart med D. Ange talet T : Ange talet D : 13 är inte delbart med 7 men: 13 = 1 x 7 + 6 ELLER 12 är delbart med 2 : 12 = 2 x 6 inmatning med input! lägga ihop strängar och tal skapa en separat funktion if-sats 16
Övning 5 Hitta nollorna för en polynom F(x) = u + v x + w x 2 Bisektionsmetoden Måste börja med 2 punkter a1, b1 så att F(a1) och F(b1) är inte av samma tecken. Testa t=(a1+b1)/2 17 Om t är av samma tecken som a1: a2= (a1+b1)/2 och b2=b1 Om t är av samma tecken som b1 a2= a1 och b2=(a1+a2)/2 Upprep tills a n b n < epsilon eller n har nått ett maximum antal Nmax
Skriv ett program för Bisektionsmetoden Skapa en separat funktion för F Fråga användaren för Nmax och a1, och a2 och epsilon. Skriv ut resultatet 18