Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Relevanta dokument
*Pekarvärden *Pekarvariabler & *

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Tentamen *:58/ID100V Programmering i C Exempel 3

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

Föreläsning 10. Pekare (Pointers)

Föreläsning 6 pekare och pekare tillsammans med arrayer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Övning från förra gången: readword

Programmeringsteknik med C och Matlab

#include <stdio.h> #include <string.h>

översiktskurs (5DV031)

4 Sammansatta datatyper

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

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

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

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Beräkningsvetenskap föreläsning 2

Arrayer. results

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

TDIU01 - Programmering i C++, grundkurs

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Indexerade variabler

Tentamen i. Programmering i språket C

2 Pekare och dynamiska variabler.

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

C++ Lektion Tecken och teckenfält

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Typkonvertering. Java versus C

Att använda pekare i. C-kod

HI1024 Programmering, grundkurs TEN

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

Introduktion C-programmering

C-programmering, föreläsning 2 Jesper Wilhelmsson

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

[] Arrayer = Indexerad variabel

Repetition C-programmering

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Pekare och arrayer. Indexering och avreferering

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Funktionens deklaration

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

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

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

TDDC77 Objektorienterad Programmering

En kort text om programmering i C.

HI1024 Programmering, grundkurs TEN

Det finns många flaggor till g++,

Funktioner och programstruktur. Föreläsning 5

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Loopar och datatyper. Föreläsning 3

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

JAVAUTVECKLING LEKTION 8

Övningar Dag 2 En första klass

HI1024 Programmering, grundkurs TEN

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Föreläsning 6: Metoder och fält (arrays)

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Grundkurs Programmering

F5: Högnivåprogrammering

Arrays (indicerade variabler) Föreläsning 6

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Övningsuppgifter till föreläsning 2 Variabler och uttryck

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

F5: Högnivåprogrammering

Outline. 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

Skizz till en enkel databas

Programmering i C, 7,5 hp

TDIU01 - Programmering i C++, grundkurs

Poster ( structar ) Postdeklarationer

Objektorienterad programmering i Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Tecken & Strängar. Kapitel 7

Filer och structer Del 2

Föreläsning 2, vecka 8: Repetition

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Introduktion till MATLAB, med utgångspunkt från Ada

Funktioner och programstruktur. Föreläsning 5

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Funktioner. Jan Erik Moström,

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Transkript:

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 problem vi arbetat med hittills har det gått att utföra hela beräkningsarbetet successivt (vartefter värden matas in av användaren) Ofta behöver man göra fler än en beräkning på hela datamängden Med nuvarande kunskap skulle det bli: int a1,a2,a3,a4,a5,..., a100; scanf( %d,&a1); scanf( %d,&a2);...??? 2

Motivering Men det blir väldigt klumpig kod om man t.ex. behöver undersöka om alla talen är lika ett annat tal: if (a1 == x).. if (a2 == x).. if (a3 == x).. I C finns en konstruktion som brukar kallas array. Den innebär att man sätter ett namn på flera dataplatser, ex: int a[100]; Deklarationen leder till att plats för 100 int skapas då programmet kör. Namnet är a. 3

Deklaration Generellt: en array deklareras som typ namn[uttryck]; Den skapar under körning plats för så många värden av typen typ som uttryck beräknas till. Det minne som reserveras för arrayen är sammanhängande För att komma åt data i arrayen använder man namn namn:... 4

Åtkomst Odefinierade värden efter deklaration. Antag t.ex. deklarationen float pressure[78]; Man kan välja ut ett element i arrayen genom att använda namn och [], t.ex. pressure[2] Tilldelning: pressure[2] = 42; Användning i uttryck, ex: angle = pressure[2] / 100; Elementen numreras från 0: pressure: 0 1 2 77 42... 5

Deklaration vs åtkomst Observera! float pressure[78]; Och pressure[2] = 42; Samma [] används både i deklarationen och tilldelningen. Uttrycket mellan [] betyder dock helt olika saker: I deklaration: Totala antalet element i arrayen I åtkomsten: Ett speciellt element väljs ut Det är av yttersta vikt att du lär dig skillnaden mellan dessa två användningar av []!! 6

Variabel indexering Den stora poängen med arrayer är att indexera dem med en variabel. Ex. int main(void) { float sum=0, pressure[50]; int i; printf( Skriv in 10 tal ); for (i=0; i<10; i=i+1) scanf( %f, &pressure[i]);... for (i=0; i<10; i=i+1) sum = sum + pressure[i];... printf( %d\n, sum); return 0; } 7

Variabelt antal element int main(void) { float sum=0, pressure[50]; int i, n; printf( Hur många tal: ); scanf( %d, &n); for (i=0; i<n; i=i+1) scanf( %f, &pressure[i]);... for (i=0; i<n; i=i+1) sum = sum + pressure[i];... printf( %d\n, sum); return 0; } OBS! Du måste själv hålla reda på det aktuella antalet (variabeln n) och största möjliga antal (50). 8

Övning Koden till detta exempel finns på hemsidan (exempel 5). Lägg till kod före summeringen som gör följande: För varje element som är negativt ska elementet som finns 3 platser före ökas med 1. 9

Makron Kompileringen sker egentligen i två oberoende steg: preprocessning den faktiska kompileringen Preprocessorn sköter (t.ex.) #include och makroexansion #include kopierar in innehållet i angiven fil i din c-fil makroexpansion är en ren textredigering som görs i din C-fil Makroexempel: #define MAX_ANTAL 50 Definierar ett makro med namnet MAX_ANTAL och dess värde till 50 Leder till att varje förekomst av en text MAX_ANTAL i din C-kod byts mot texten 50. 10

Makron användning med arrayer #define MAX_ANTAL 50 int main(void) { float sum=0, pressure[max_antal]; int i, n; printf( Hur många tal: ); } scanf( %d, &n); if (n > MAX_ANTAL)...?? for (i=0; i<n; i=i+1) scanf( %f, &pressure[i]);... for (i=0; i<n; i=i+1) sum = sum + pressure[i];... printf( %d\n, sum); return 0; Övning: Skriv färdigt denna test i din kod på lämpligt sätt 11

Flerdimensionella arrayer Ibland kan man behöva arrayer med flera dimensioner. En tvådimensionell array kan liknas vid en tabell. Ex: int main(void) { int chess_board[8][8], i, j;... if (chess_board[i][j] == KING) give_up();... } return 0; 12

Flerdimensionella arrayer Ibland kan man behöva arrayer med flera dimensioner. En tvådimensionell array kan liknas vid en tabell. Ex: int main(void) { int chess_board[8][8], i, j;... for (i=0; i<8; i++) for (j=0; j<8; j++) Skapar under körning plats för 64 st int if (chess_board[i][j] == KING) threaten_king(); return 0;} 13

Initiering i deklaration Arrayer kan initieras med data inom {}, ex: int array[100]={13, 46, 19, 32}; Oinitierade element blir 0, trick för att 0-ställa alla element: int array[100]={}; Flerdimensionella: {} för varje delarray : int matrix[2][3]={{4, 7, 11}, { 3, 4, 199}}; Endast möjligt i deklarationen Kan aldrig göra operationer på hela arrayer: int array[100]={13, 46, 19, 32}, other[]; other = array; 14

Övning Utgå från exempel 6 på hemsidan. Lägg till kod som Deklarerar en till 2-dim array (oinitierad). Tilldelar den transponatet av arrayen A. Visar att det är korrekt genom att också skriva ut den nya En transponerad matris är en där kolumner och rader byter plats, ex. a b c d e f T = a d b e c f 15

Textsträngar En textsträng är en sekvens av teckenkoder avslutad med teckenkoden 0 (heltalsvärdet 0) Konstantsträngar har vi mött i scanf och printf, ex printf( Summan blev %d, sum); Konstantsträngen är automatiskt avslutad med 0. Strängar kan lagras i arrayer av typen char Kan initieras i deklarationen: char format_string[100] = Summan blev %d ; char arrayer utan [] har samma typ som konstantsträngar: printf(format_string, sum); Strängvärda objekt har konverteringskod %s char name[100] = Anna ; printf("hon heter %s i förnamn\n", name); 16

Textsträngar En textsträng är en sekvens av teckenkoder avslutad med teckenkoden 0 (heltalsvärdet 0) Konstantsträngar har vi mött i scanf och printf, ex printf( Summan blev %d, sum); Konstantsträngen är automatiskt avslutad med 0. Strängar kan lagras i arrayer av typen char Kan initieras i deklarationen: char format_string[100] = Summan blev %d ; char arrayer utan [] har samma typ som konstantsträngar: printf(format_string, sum); Obs! Här anges inget index Strängvärda objekt har konverteringskod %s char name[100] = Anna ; printf("hon heter %s i förnamn\n", name); 17

Textsträngar (forts.) Alternativ utskrift: char name[42]= Eugen ; puts(name); Alternativ inmatning: char name[42]; gets(stdin, 42, name); 18

Funktioner och arrayer Exempel: Ett program som bara läsa in värden från användaren och sedan skriver ut. En funktion för vardera uppgift 19

Funktioner och arrayer void read_array(int A[87], int n) { int i; for (i=0; i<n; i++) scanf( %d, &A[i]); } void print_array(int A[87], int n) { int i; for (i=0; i<n; i++) printf( %d\n, A[i]); } int main(void) { int A[87]; read_array(a, 5); print_array(a, 5); return 0; } 20

Övning Fungerar verkligen exempel 7? - Testa! Väg detta mot påståendet att det är kopior av de aktuella argumenten som skickas vid funktionsanrop. 21

Array som returvärde? Nej! Arrayer kan inte returneras. Det finns inte heller något behov: Om man vill returnera en mängd av data från en funktion så ser man till att den tar en array som parameter 22

Sammanfattning Arrayer underlättar en bra modularisering (uppdelning i funktioner) Skillnad mot enkla variabler: en array-parameter är en pekare (data delas med anroparen) Inga operationer på hela arrayer Strängar lagras i arrayer 23