F5 - Fält & strängar 1 Programmeringsteknik, 4p vt-00 Fält Många element av samma typ Typexempel : lista av heltal Gemensamt namn Individuella värden nås med index
F5 - Fält & strängar 2 Programmeringsteknik, 4p vt-00 exempel /* * Exempel på enkel heltalslista */ #include int main(void) { int res[10]; /* OBS! index = 0..9 */ int i; for (i=0;i<=9;i++) { res[i] = 10-i; printf("res[%d]=%d\n",i,res[i]); } return 0; } Antal element
F5 - Fält & strängar 3 Programmeringsteknik, 4p vt-00 Körning
F5 - Fält & strängar 4 Programmeringsteknik, 4p vt-00 Initialisering Elementen i fältet kan ges värden vid deklarationen int res[10]={10,9,8,7,6,5,4,3,2,1}; Om listan är kortare än det angivna antalet, blir resterande element 0 int res[10]={0}; initialiserar alla el. till 0 Det bästa är att själv explicit initialisera alla element for (i=0;i<=9;i++) res[i]=0; /* Initialisering */ Antalet kan utelämnas om el. initialiseras med lista int res[]={10,9,8,7}; /* 4 el. index 0..3 */
F5 - Fält & strängar 5 Programmeringsteknik, 4p vt-00 Indexering fältnamn[uttryck] Där uttrycket kan evalueras till integral type (s.111), dvs någon heltalstyp eller char. Viktigt att hålla sig inom indexgränserna (0..antal el.-1) MYCKET vanligt programmeringsfel!
F5 - Fält & strängar 6 Programmeringsteknik, 4p vt-00 Sortera en lista Lista av n st. osorterade heltal lista 1, lista 2, lista 3, …, lista n ordnas i stigande följd. Algoritm BubbelSort(lista,n) bytt = true sist = n repeat for i=1 to sist-1 do begin if lista i > lista i+1 then begin byt plats bytt = true end sist = sist - 1 until not bytt
F5 - Fält & strängar 7 Programmeringsteknik, 4p vt-00 Kod do { bytt = 0; /* logiskt false */ for (i=0;i <= sist-1; i++) { if (lista[i] > lista[i+1]) { temp = lista[i]; lista[i] = lista[i+1]; lista[i+1] = temp; bytt = 1; /* logiskt true */ } sist = sist - 1; }while (bytt);
F5 - Fält & strängar 8 Programmeringsteknik, 4p vt-00 Körning Listan före sortering Listan sorterad
F5 - Fält & strängar 9 Programmeringsteknik, 4p vt-00 Spårad körning Listan före sortering varv <-- 0 och 1 bytt <-- 1 och 2 bytt <-- 2 och 3 bytt <-- 3 och 4 bytt <-- 4 och 5 bytt <-- 5 och 6 bytt <-- 6 och 7 bytt <-- 7 och 8 bytt
F5 - Fält & strängar 10 Programmeringsteknik, 4p vt-00 …varv <-- 7 och 8 bytt varv <-- 1 och 2 bytt <-- 3 och 4 bytt <-- 4 och 5 bytt <-- 5 och 6 bytt <-- 6 och 7 bytt
F5 - Fält & strängar 11 Programmeringsteknik, 4p vt-00 Textsträngar Ett fält av tecken Har enkel initialisering char kursNamn[]= ”Programmeringsteknik”; samma som char kursNamn[]= {’P’,’r’,’o’,’g’,’r’,’a’,’m’,’m’,’e’,’r’, ’i’,’n’,’g’,’s’,’t’,’e’,’k’,’n’,’i’,’k’,’\0’};
F5 - Fält & strängar 12 Programmeringsteknik, 4p vt-00 Textsträngar void exempel1(void) { char strng[10]; /* OBS! index = 0..9 */ int i; printf(" exempel \n\n"); printf("Mata in en sträng : "); scanf("%s", strng); /* Se scanf s.500 */ printf("-->%s<--\n", strng); printf("-- konverteringstecknet %s --\n\n"); }/* exempel1 */
F5 - Fält & strängar 13 Programmeringsteknik, 4p vt-00 Körning exempel Mata in en sträng : så här -->så< konverteringstecknet ----
F5 - Fält & strängar 14 Programmeringsteknik, 4p vt-00 Mera om textsträngar I C avslutas en sträng alltid med tecknet ’\0’ null-tecknet/end-of-string Se det som att strängar har variabel längd med avslutas med ett speciellt tecken. Det utrymme som reserveras måste inkludera en plats för null-tecknet ”mars” är en sträng av längd 5 ”tomma strängen” ”” är en sträng av längd 1
F5 - Fält & strängar 15 Programmeringsteknik, 4p vt-00 Strängfunktioner strcat(sträng1, sträng2) konkatenerar två strängar, resultaterande sträng returneras (även i sträng1) strcmp(sträng1, sträng2) jämförelse, ”logiskt” värde returneras (-,0,+) om sträng1 är lexikografiskt sträng2 strcpy(sträng1, sträng2) kopierar sträng2 till sträng1, som skrivs över, (en pekare till) resultatet returneras strlen(sträng) antalet tecken före \0 returneras
F5 - Fält & strängar 16 Programmeringsteknik, 4p vt-00 strcat void exempel2(void) { char str1[] = "Första strängen"; char str2[] = "Andra!"; printf(" exempel \n\n"); printf("-->%s<--\n",strcat(str1,str2)); printf(" konkatenering \n\n"); }/* exempel2 */
F5 - Fält & strängar 17 Programmeringsteknik, 4p vt-00 Körning exempel >Första strängenAndra!< konkatenering
F5 - Fält & strängar 18 Programmeringsteknik, 4p vt-00 strcpy void exempel3(void) { char str1[] = "Första strängen"; char str2[] = "Andra!"; printf(" exempel \n\n"); printf("-->%s<--\n", strcpy(str1,str2)); printf(" strängkopiering \n\n"); }/* exempel3 */
F5 - Fält & strängar 19 Programmeringsteknik, 4p vt-00 Körning exempel >Andra!< strängkopiering
F5 - Fält & strängar 20 Programmeringsteknik, 4p vt-00 strlen void exempel4(void) { char str1[] = ""; /* Tomma strängen */ char str2[] = " "; /* ett blanktecken bara */ int lgd; printf(" exempel \n\n"); lgd = strlen(str1); printf("Tomma strängens längd = %i\n",lgd); printf("Sträng med bara ett blanktecken har längden = %i\n",strlen(str2)); printf(" stränglängd \n\n"); }/* exempel4 */
F5 - Fält & strängar 21 Programmeringsteknik, 4p vt-00 Körning exempel Tomma strängens längd = 0 Sträng med bara ett blanktecken har längden = stränglängd
F5 - Fält & strängar 22 Programmeringsteknik, 4p vt-00 strcmp void exempel5(void) { char str1[] = "sven svensson"; /* Liten */ char str2[] = "Sven Svensson"; /* Stor */ printf(" exempel \n\n"); if (strcmp(str1,str2)) printf("Lika, ty %s = %s\n",str1,str2); else if (strcmp(str1,str2) < 0) printf("%s < %s\n",str1,str2); else if (strcmp(str1,str2) > 0) printf("%s > %s\n",str1,str2); else printf("Hit kan man inte komma!\n"); printf("----- strängjämförelser -----\n\n"); }/* exempel5 */
F5 - Fält & strängar 23 Programmeringsteknik, 4p vt-00 Körning exempel Lika, ty sven svensson = Sven Svensson strängjämförelser