Problemlösning Veckodagsproblemet Gissa talet Siffersumman.

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

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.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Problemcentrerad undervisning metod Hokkaido lärarhögskolan (Asahikawa) Professor Kazuhiko Souma
Föreläsning1. • Boken?!?! • Vad är ett program? • Kompilerande-Interpreterande • Programmeringsmiljö • Hello World! • Att programmera och ett enkelt program.
Vecka 47 Måndag Onsdag Vecka 48 Måndag Torsdag Fredag Vecka 49 Måndag Onsdag Torsdag Vecka 51 Onsdag 19 dec Här och nu! tenta.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
xn + yn = zn Problemlösning Några enkla metoder
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Föreläsning 7 Analys av algoritmer T(n) och ordo
P-uppgiften: regler, planering och specifikation
Multiplicera lika tal med 3 siffror som slutar på 55
Malin Junerfält Mitt Syslöjdsarbete.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
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.
Algoritmer och datastrukturer
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik K och Media
Grundläggande programmering
Studenter Lär Av Studenter ”SLAS” Karim Daho Januari 2007.
Programmering B PHP Lektion 2
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
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; }
Från binära till hexadecimala
1. Vad? Med kvalitetsdeklarationer sätter vi tydliga nivåer på våra tjänster och vår service 2.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Programmering B PHP Lektion 3
Vektorer (klassen Vector) Sortering
Powerpoint …är ett program som du använder till att: …är bra till att
Geometri Geo = jord Metri = mäta.
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Grundläggande programmering
Algoritmer. Ordet kommer från en persisk författare som kom från al’Khowârizmi (engelskans algorithm). Han skrev boken ’Kitab al jabr w’al-muqabala’.
Modulär programutveckling
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
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.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Rekursion. En metoddefinition som innehåller ett anrop av sig själv kallas rekursiv.
Anders Sjögren Deklarationsområde och funktioner.
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
Föreläsning 1 Introduktion till kursen. Algoritmer
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng while-loop do-loop continue, break PROJEKT Föreläsning 5.
Föreläsning 3 Algoritm Grundstrukturer i en algoritm Sekvens Selektion Iteration Selektion - if-sats Selektion - if-else-sats Selektion - switch-sats jämförelseoperatorer.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Algoritmer och loopar Algoritmer, beräkningsbarhet
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Mot aktiv undervisning med problemlösning och samtal i klassrummet
Anders Sjögren Funktioner något in och något annat ut.
Julkalender för 4A
Schema för Villan i Vivalla Verksamheten måndagen den 15 augusti.
Python.
Tala om tal.
Föreläsning 11: Rekursion
Mer om repetionssatser och arrayer
Iteration – Repetitionssats - while
xn + yn = zn Problemlösning Några enkla metoder
KIOSKANSVAR 2018 MÅNDAG FREDAG TISDAG LÖRDAG ONSDAG SÖNDAG TORSDAG
Presentationens avskrift:

Problemlösning Veckodagsproblemet Gissa talet Siffersumman

Veckodagsproblemet Vi vill skriva ett program som kan berätta för oss vad det är för veckodag om x dagar.

Arbetsgång Förstå problemet Strukturera problemet (dela upp problemet) Konstruera algoritmer, skriva pseudokod Skriva programmet (detta steg består då av många steg och många iterationer – man programmerar kanske top-down) Testning, dokumentering

Förstå problemet Vilka indata behöver vi för att lösa problemet? Vilka utdata förväntar sig användaren? Vilka problem kan uppstå, vilka ogiltiga data kan användaren ge. Hur skall det grafiska gränssnittet fungera?

Strukturera problemet Först måste vi skaffa indata och lagra dessa i något bra format Sedan måste vi beräkna utdata (när man löser stora problem brukar man i detta steg också dela upp beräkningarna i flera delar) Sist ska vi presentera utdata

Indata Snyggast hade varit att programmet själv tog reda på dagens veckodag. Vi skall här välja den något enklare varianten att användaren får ange dagens veckodag Dessutom skall vi för att göra det ännu enklare be användaren ange 0 för måndag, 1 för tisdag, osv Antal dagar får användaren ange med ett heltal

Algoritm Hur skulle vi själva lösa problemet? Hur skall vi beskriva lösningen så att en idiot skulle kunna förstå. Dvs beskriv en steg för steg lösning av problemet. Detta är algoritmen som löser problemet. Skriv om det i pseudokod (se exempel)

Hur skulle vi själva lösa problemet? Först skulle vi ta bort alla hela multiplar av 7 från x. Sedan skulle vi räkna fram veckodagarna från dagens dag. Dagens dag – onsdag , x = 52 7*7 = 49, 52 – 49 = 3 så vi behöver räkna fram 3 dagar torsdag, fredag, lördag

Algoritm 0-måndag, 1-tisdag, 2-onsdag,… idag = dagens veckodag, x = antal dagar Om x > = 7 dra bort 7 från x. Fortsätt tills x < 7. Beräkna resultat = idag + x Om resultat >= 7 dra bort 7 (vi kan inte räkna fram längre än 6 enligt första punkten…) Avläs vilken veckodag det motsvarar möjligen diskutera läsa en char och problem med att retur-slaget ligger kvar i input-bufferten. detta kan lösas med fflush(stdin) men detta är ej korrekt och därmed ej portabelt

Pseudokod läs in idag, x medans x >= 7 x = x – 7 resultat = idag + x om resultat >= 7 så resultat = resultat –7 om resultat = 0 presentera måndag om resultat = 1 presentera tisdag …. Ibland kan algoritm och pseudokod göras samtidigt. Oftast är pseudokoden mera detaljrik och närmare det färdiga programmet. Obs att detta är en lösning, det finns många fler en del både snitsigare och effektivare. Poängen är att denna lösning följer nära hur vi skulle löst problemet. Det har inte behövts några snilledrag!

Utdata Vi skriver här bara rätt veckodag med siffra till kommandotolken

#include <stdio.h> int main(void) { int idag, antalDagar, soktDag; printf("0-mandag, 1-tisdag, 2-onsdag, 3-torsdag, 4-fredag, 5-lordag, 6-sondag\n"); printf("Ange dagens dag:"); scanf("%d",&idag); printf("Om hur manga dagar vill du veta vad det ar for veckodag?"); scanf("%d",&antalDagar); while(antalDagar>=7) antalDagar=antalDagar-7; } soktDag=antalDagar+idag; if(soktDag>=7) soktDag=soktDag-7; printf("Den dagen är det %d\n",soktdag); return 0; Diskutera funktioner, lite väl mycket, globala variabler, framtida lösningar

Gissa talet Skriv programmet ”Gissa ett tal”! Datorn ”tänker på ett tal” genom att slumpa ett heltal i intervallet [1,100]. Användaren skall försöka gissa det hemliga talet. Datorn besvarar gissningarna med ”Större!”, ”Mindre!” eller ”Rätt!”. Jag tänker nu på ett tal i intervallet [1..100]. Gissa talet! 37 Större! Gissa talet! 65 Mindre! Gissa talet! 52 Större! Gissa talet! 56 Rätt! Du gissade rätt på 4 gissningar.

#include <stdio. h> #include <stdlib #include <stdio.h> #include <stdlib.h> // Gissa ett tal i intervallet [1..100] int main(void) { int svar, gissning, antal=0; srand(time(0)); svar=(rand()%100)+1; printf("Jag tänker nu på ett tal i intervallet [1..100]. \n"); do printf("Gissa talet! "); scanf("%d",&gissning); antal++; if(gissning<svar) printf("Större! "); } else if(gissning>svar) printf("Mindre! "); } while (gissning!=svar); printf("Rätt! \n"); printf("Du gissade rätt på %d gissningar.",antal);

Siffersumman Skriv ett program som läser in ett positivt heltal, och skriver ut talets siffersumma (d v s summan av de siffror som ingår i talet).(I exemplet nedan får vi siffersumman som 1+6+3+2=12.) Mata in ett tal: 1632 Siffersumman är 12.

#include <stdio. h> #include <stdlib #include <stdio.h> #include <stdlib.h> // Programmet beräknar siffersumman av ett tal >=0 void main(void) { int tal, siffersumma=0; printf("Mata in ett tal : "); scanf("%d",&tal); while(tal>0) siffersumma=siffersumma+tal%10; tal=tal/10; } printf("Siffersumman är %d",siffersumma);