MrGunner Postad 4 September , 2008 Rapport Postad 4 September , 2008 Har ett problem som jag inte vet hur jag ska lösa. Har en uppgift som är så här: "Write a program that reads two real numbers (num1 and num2) and an integer (operator). Valid integers are 1, 2, 3, 4 and 5. If the integer is equal to 1 the program shall calculate the sum, for 2 the difference, for 3 the quotient, for 4 the product and for 5 exit the program. Observe that for operator 3 - handle zero in a nice way." Det jag inte klarar av är "for 5 exit the program". Är nybörjare så det jag "kan" använda är typ, if, else, while, for. Antar att jag måste ha någon loop med, men vet inte hur. Någon kunnigare än jag som kan hjälpa mig. Tack på förhand Citera
*Adde* Postad 4 September , 2008 Rapport Postad 4 September , 2008 Det var ett tag sedan jag gjorde detta, men om du t.ex. använder en "if"-sats bör det bli typ såhär: { int a; if (int a = 5) return; och sedan resten av if-alternativen i vilken ordning du vill. Som sagt - kommer inte riktigt ihåg, men tror att du söker en svårare lösning än vad som är nödvändigt. Citera
fredyr Postad 4 September , 2008 Rapport Postad 4 September , 2008 Det var ett tag sedan jag gjorde detta, men om du t.ex. använder en "if"-sats bör det bli typ såhär: int a; if (a == 5) { return; } och sedan resten av if-alternativen i vilken ordning du vill. Som sagt - kommer inte riktigt ihåg, men tror att du söker en svårare lösning än vad som är nödvändigt. FYP Citera
MrGunner Postad 4 September , 2008 Författare Rapport Postad 4 September , 2008 Tack så jättemycket för svaret Adde. Hmmm, det var verkligen enklare än jag trodde. Har även problem med att "hindra" programmet att dividera med 0. Har du nåt enkelt sätt för det också kanske. Citera
Loveless Postad 4 September , 2008 Rapport Postad 4 September , 2008 Vad sägs om att kontrollera om talet är noll? (eller bättre, inte noll) if(num2 != 0) { result = num1/num2; } else { "kan inte dividera med 0" } Citera
*Adde* Postad 4 September , 2008 Rapport Postad 4 September , 2008 Tack så jättemycket för svaret Adde. Hmmm, det var verkligen enklare än jag trodde. Har även problem med att "hindra" programmet att dividera med 0. Har du nåt enkelt sätt för det också kanske. Du nästlar ifsatsen med a=3, typ såhär: int a; if (a == 3) { if(num1==0 || num==0){ return; else printf(num1/num2); } Förmodligen massor med fel, men du förstår principen. Svårt å plocka fram gamla progkunskaper när man grindar Citera
MrGunner Postad 4 September , 2008 Författare Rapport Postad 4 September , 2008 Underbart, tack så mycket. Har suttit här hela kvällen så skriver du några underbara rader och problemet är löst. Tack Adde och Loveless Citera
MrGunner Postad 6 September , 2008 Författare Rapport Postad 6 September , 2008 Har fortfarande problem med denna uppgift. Vid division med 0 ska jag få upp texten "Det går inte att dividera med 0", vilket också fungerar. Problemt är att jag alltid får upp den texten vad jag än väljer. Spelar ingen roll om jag dividerar med ett annat tal eller om jag så adderar. Tacksam för hjälp // Calculator 2 #include <stdio.h> #include <conio.h> int main(void) { int heltal, num1, num2, summa, skillnad, kvot, produkt; //Variabler printf( "Skriv in första talet\n"); scanf( "%d", &num1); printf( "Skriv in andra talet\n"); scanf( "%d", &num2); printf( "Skriv ett heltal mellan 1 och 5\n1: Adderar\n2:"); printf(" Subtraherar\n3: Dividerar\n4: Multiplicerar\n5: Avslutar\n"); scanf( "%d", &heltal); //Summan if ( heltal==1 ) { summa = num1 + num2; printf( "Summan är %d\n", summa ); } //Differensen if ( heltal==2 ) { skillnad = num1 - num2; printf( "Skillnaden är %d\n", skillnad ); } //Divisionen if ( heltal==3 && num2!=0 ) { kvot = num1 / num2; printf( "Kvoten är %d\n", kvot ); } else { printf ("Det går inte att dividera med 0\n");//Denna texten följer med vilken heltal jag än väljer?? } //Produkten if ( heltal==4 ) { produkt = num1 * num2; printf( "Produkten är %d\n", produkt ); } //Avsluta if ( heltal==5 ) { return; } getch(); return 0; } Citera
Kristoffer Postad 6 September , 2008 Rapport Postad 6 September , 2008 Har fortfarande problem med denna uppgift. Vid division med 0 ska jag få upp texten "Det går inte att dividera med 0", vilket också fungerar. Problemt är att jag alltid får upp den texten vad jag än väljer. Spelar ingen roll om jag dividerar med ett annat tal eller om jag så adderar. Tacksam för hjälp // Calculator 2 #include <stdio.h> #include <conio.h> int main(void) { int heltal, num1, num2, summa, skillnad, kvot, produkt; //Variabler printf( "Skriv in första talet\n"); scanf( "%d", &num1); printf( "Skriv in andra talet\n"); scanf( "%d", &num2); printf( "Skriv ett heltal mellan 1 och 5\n1: Adderar\n2:"); printf(" Subtraherar\n3: Dividerar\n4: Multiplicerar\n5: Avslutar\n"); scanf( "%d", &heltal); //Summan if ( heltal==1 ) { summa = num1 + num2; printf( "Summan är %d\n", summa ); } //Differensen if ( heltal==2 ) { skillnad = num1 - num2; printf( "Skillnaden är %d\n", skillnad ); } //Divisionen if ( heltal==3 && num2!=0 ) { kvot = num1 / num2; printf( "Kvoten är %d\n", kvot ); } else { printf ("Det går inte att dividera med 0\n");//Denna texten följer med vilken heltal jag än väljer?? } //Produkten if ( heltal==4 ) { produkt = num1 * num2; printf( "Produkten är %d\n", produkt ); } //Avsluta if ( heltal==5 ) { return; } getch(); return 0; } Ändra ditt program så att det ser ut såhär: // Calculator 2 #include <stdio.h> #include <conio.h> int main(void) { int heltal, num1, num2, summa, skillnad, kvot, produkt; //Variabler printf( "Skriv in första talet\n"); scanf( "%d", &num1); printf( "Skriv in andra talet\n"); scanf( "%d", &num2); printf( "Skriv ett heltal mellan 1 och 5\n1: Adderar\n2:"); printf(" Subtraherar\n3: Dividerar\n4: Multiplicerar\n5: Avslutar\n"); scanf( "%d", &heltal); //Summan if ( heltal==1 ) { summa = num1 + num2; printf( "Summan är %d\n", summa ); } //Differensen if ( heltal==2 ) { skillnad = num1 - num2; printf( "Skillnaden är %d\n", skillnad ); } //Divisionen if ( heltal==3) { if (num2!=0) { kvot = num1 / num2; printf( "Kvoten är %d\n", kvot ); } else { printf ("Det går inte att dividera med 0\n");//Denna texten följer med vilken heltal jag än väljer?? } } //Produkten if ( heltal==4 ) { produkt = num1 * num2; printf( "Produkten är %d\n", produkt ); } //Avsluta if ( heltal==5 ) { return; } getch(); return 0; } Citera
MrGunner Postad 6 September , 2008 Författare Rapport Postad 6 September , 2008 Tack så mycket Kristoffer, funkar hur bra som helst. Förstår dock inte varför inte "min" fungerade. Citera
Loveless Postad 6 September , 2008 Rapport Postad 6 September , 2008 Bryter ut den väsentliga delen: if ( heltal==3 && num2!=0 ) Det som står där är "Om heltalet är tre OCH num2 inte är noll ska följande utföras" Eftersom andra funktioner (som additionen) bryter mot första regeln så utförs inte denna. Efter det har du en else vilket då betyder om ovanstående är felaktigt ska denna utföras, dvs skriva ut texten. Citera
MrGunner Postad 6 September , 2008 Författare Rapport Postad 6 September , 2008 Tack Loveless, nu föll poletten ner (tillfälligt). Hur gör man om man inte vill att programmet ska avslutas efter en gång? Om man vill att det ska hålla på tills man trycker avsluta. Har ännu inte förstått det här med loopar. PS. Får bättre hjälp här än på föreläsningarna. Citera
Kristoffer Postad 7 September , 2008 Rapport Postad 7 September , 2008 Du kan lägga en while-slinga runt huvuddelen av programmet. Lägg in nedanstående rad direkt före alla variabeldeklarationer i början av programmet: while (true) { Lägg sedan in slutmåsvingen längst ner, efter return 0; Citera
-mange- Postad 7 September , 2008 Rapport Postad 7 September , 2008 du kan köra med "else if" om du vill så slipper programmet testa "heltal" i varje if-sats, fast et kanske e överkurs if (heltal==1) { ... } else if (heltal==2) { ... } else { ... } ovs, osv... Citera
Loveless Postad 7 September , 2008 Rapport Postad 7 September , 2008 Nja, snyggast är väl ett switch-case upplägg, men det är definitivt nästa nivå. För övrigt, loopen hade jag gjort med en do{ ... }while(heltal != 5); mest för att det är estetiskt snyggare. Citera
MrGunner Postad 13 September , 2008 Författare Rapport Postad 13 September , 2008 Hallå igen c-experter. Har nu ett nytt problem som jag har svårt att komma igång med. Här är uppgiften: Stone-Scissors-Paper Rules: the computer and you pick, without each other knowing, one symbol of three: Stone, Scissors or Paper. If both players picked the same symbol, the result is draw. Otherwise: Stone beats Scissors, Scissors beat Paper and Paper beats Stone. The winner gets one point - first player that reach 10 points wins the game. Har gjort lite men vet inte om jag tänker rätt. //Sten sax påse #include <stdio.h> #include <conio.h> #include <time.h> #include <stdlib.h> int play(void); //Funktionsprototyp int main(void) { int tal=0,du=0, datorn, tid; tid=time (NULL); srand(tid); while (du || datorn <=10) { printf("Skriv in ett tal mellan 1 och 3\n\n1: sten\n2: sax\n3: påse\nGör ditt val: "); scanf("%d", &du); if(du == 1 && tal == 1) printf("Oavgjort"); else if (du == 1 && tal == 2) { printf("Du vinner"); du++; } else (du == 1 && tal == 2) { printf("Du förlorar"); datorn++; } } getch(); return 0; } int play(void); { int tal; tal = rand(); tal = (tal %3)+1 return tal; } Kan jag fortsätta på detta sättet med massa if-satser eller finns det något annat sätt? Är väldigt osäker på hur man använder slumptal. Citera
Loveless Postad 13 September , 2008 Rapport Postad 13 September , 2008 #include <stdio.h> #include <conio.h> #include <time.h> #include <stdlib.h> int play(void); //Funktionsprototyp int main(void) { int tal=0,du=0, datorn, tid; tid=time (NULL); srand(tid); while (du || datorn <=10) { printf("Skriv in ett tal mellan 1 och 3\n\n1: sten\n2: sax\n3: påse\nGör ditt val: "); scanf("%d", &du); if(du == 1 && tal == 1) printf("Oavgjort"); else if (du == 1 && tal == 2) { printf("Du vinner"); du++; } else (du == 1 && tal == 2) { printf("Du förlorar"); datorn++; } } getch(); return 0; } int play(void); { int tal; tal = rand(); tal = (tal %3)+1 return tal; } Kan jag fortsätta på detta sättet med massa if-satser eller finns det något annat sätt? Är väldigt osäker på hur man använder slumptal. Det ska nog inte vara några problem, så länge du håller reda vad du vill göra och i vilken ordning. Ser dock några fel du har. 1) While satsen, där måste du kontrollera båda variablerna med 10 var för sig. Som det är skrivet just nu så tolkas variabeln till att vara sann så fort det får ett värde skiljt ifrån noll. 2) Varibler. Du använder "Du" både för att räkna poäng och för att hantera valet av sten/sax/påse. Det kommer inte fungera. 3) Du gör aldrig anropet till funktionen play() så kommer inte få något resultat på datorns spel. 4) Du bör göra en kontroll att man matar in ett korrekt värde (1-3). Citera
MrGunner Postad 13 September , 2008 Författare Rapport Postad 13 September , 2008 Tack för att du orkar svara på mina problem. Om jag börjar med nr 1: Såg nu att jag hade ||, borde väl vara "while (du && datorn <10)". Jag förstår inte riktigt vad du menar med att kontrollera båda variablerna med 10 var för sig. Kan jag ha en whilesats till efter den första, eller är det bättre att använda en for sats? Citera
Loveless Postad 13 September , 2008 Rapport Postad 13 September , 2008 Tack för att du orkar svara på mina problem. Om jag börjar med nr 1: Såg nu att jag hade ||, borde väl vara "while (du && datorn <10)". Jag förstår inte riktigt vad du menar med att kontrollera båda variablerna med 10 var för sig. Kan jag ha en whilesats till efter den första, eller är det bättre att använda en for sats? Nej, det jag menar är att du skriver "while(du < 10 && datorn < 10)". Om man skriver som du har gjort så kommer kompilatorn tolka det som "medan 'du' är sann, och datorn < 10" vilket den tycker är helt ok (Överkurs: lite beroende på hur man har definierat hur sant/falskt hanteras, i C råkar det vara 0=falskt, allt annat sant). Skriver man som jag skrev så blir det "medan 'du' är mindre än tio och 'datorn' är mindre än tio". Citera
MrGunner Postad 17 September , 2008 Författare Rapport Postad 17 September , 2008 Det ska nog inte vara några problem, så länge du håller reda vad du vill göra och i vilken ordning. Ser dock några fel du har. 1) While satsen, där måste du kontrollera båda variablerna med 10 var för sig. Som det är skrivet just nu så tolkas variabeln till att vara sann så fort det får ett värde skiljt ifrån noll. 2) Varibler. Du använder "Du" både för att räkna poäng och för att hantera valet av sten/sax/påse. Det kommer inte fungera. 3) Du gör aldrig anropet till funktionen play() så kommer inte få något resultat på datorns spel. 4) Du bör göra en kontroll att man matar in ett korrekt värde (1-3). Har gjort en del ändringar men får det inte att fungera. //Sten sax påse #include <stdio.h> #include <conio.h> #include <time.h> #include <stdlib.h> int play(void); //Funktionsprototyp int main(void) { int tal, du=0, datorn=0, tid, val;//"du" är dina poäng, "datorn" är datorns poäng tid=time (NULL); srand(tid); while(du != 10 && datorn != 10) { printf("Skriv in ett tal mellan 1 och 3\n\n1: sten\n2: sax\n3: påse\nGör ditt val: "); scanf("%d", &val); printf("Du valde %d\n", val); printf("Datorn valde %d\n", play(tal));//Hmmmm if (val>=4 || val<=1) printf("Välj ett annat tal") if(val == 1 && tal == 1) printf("Oavgjort, inga poäng"); else if (val == 1 && tal == 2) { printf("Du vinner, ett poäng till dig"); du++; } else { (val == 1 && tal == 2) printf("Du förlorar, ett poäng till datorn"); datorn++; } } getch(); return 0; } int play(void); { int tal; tal = rand(); tal = (tal %3)+1 return tal; } 2) Tror att jag fått ordning på variablerna 3) Anropet till funktionen är nog riktigt tokigt 4) Antar att du menar att om man skriver ett tal som inte är 1-3 Citera
Loveless Postad 17 September , 2008 Rapport Postad 17 September , 2008 printf("Datorn valde %d\n", play(tal));//Hmmmm Här är det riktigt galet. funktionen du har skrivit har ingen inparameter, och du måste ta hand om returvärdet. föreslår: tal = play(); printf("Datorn valde %d\n",tal); Sättet du skrev på skulle resultera i att "datorn valde" texten skulle vara korrekt (när du väl tagit bort inparametern som kompilatorn inte kommer tillåta) men värdet i tal är fortfarande obestämt. if (val>=4 || val<=1) printf("Välj ett annat tal") Godkända tal är väl ändå 1-3, sättet du skrivit på gör bara 2-3 godkända (men eftersom det bara är texten som påverkas kommer 1 att fungera ändå). Föreslår val < 1 på slutet (mindre än, inte mindre än eller lika med) if(val == 1 && tal == 1) printf("Oavgjort, inga poäng"); Så endast sten mot sten ger oavgjort? Vad händer om jag väljer påse? Föreslår if(val == tal) så fångar du upp de 3 olika oavgjorda fallen. else if (val == 1 && tal == 2) { printf("Du vinner, ett poäng till dig"); du++; } Återigen bara ett fall av tre där du vinner. Vad händer om du väljer påse? else { (val == 1 && tal == 2) var är if satsen till detta vilkor, och vilkoret är ju samma som ovan? klipp och klistrafel? printf("Du förlorar, ett poäng till datorn"); datorn++; } Som skrivet, så har du bara koll på 2 fall av 9, och där datorn just nu vinner de 7 resterande. Det är ju inte direkt fair. int play(void); { int tal; tal = rand(); tal = (tal %3)+1 return tal; } 2) Tror att jag fått ordning på variablerna 3) Anropet till funktionen är nog riktigt tokigt 4) Antar att du menar att om man skriver ett tal som inte är 1-3 Kan ge dig lite hjälp, vilkoren du måste täcka upp är: Oavgjorda: val == 1 && tal == 1 val == 2 && tal == 2 val == 3 && tal == 3 Vinst: val == 1 && tal == 2 val == 2 && tal == 3 val == 3 && tal == 1 Förlust: val == 1 && tal == 3 val == 2 && tal == 1 val == 3 && tal == 2 Självklart går det att kombinera ihop dessa så att du inte behöver all 9 if satser, men lite får du fixa själv. Nu är det dags för fotboll. Citera
MrGunner Postad 17 September , 2008 Författare Rapport Postad 17 September , 2008 Tack för hjälpen. Nu fungerar allt nästan som det ska. Får inte ordning på: if (val>=4 || val<1) { printf("Välj ett annat tal") } Har jag med detta får jag felmeddelande vid kompilering. Säger inte detta att om det är falskt så går vi ner en rad och kör nästa? Hmm Citera
Loveless Postad 17 September , 2008 Rapport Postad 17 September , 2008 Jo, men du behöver ett semikolon på slutet av raden. Citera
MrGunner Postad 17 September , 2008 Författare Rapport Postad 17 September , 2008 Hmmm, upptäckte det precis. Tack så jättemycket. Ingen vidare match va? Arsenal klarade x till slut. Phuuuu Citera
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.