Permalänk
Medlem

hjälp c++

Jag vill göra så att om man skriver in month = 1 och month = 2 beroende på om det är ett skottår ska det ge ett tal men om det är ett "normalt år" vill jag få ett annat tal.

Jag har skrivit detta men det är fel.

if ((year) % 400 == 0 || ((year) % 100 != 0 && (year) % 4 == 0)) switch (month) case 1: x= 6; break; case 2: x= 2 ; break; else if switch (month) { case 1: x=0; break; case 2: x=3; break; case 3: x=3; break; case 4: x=6; break; case 5: x=1; break; case 6: x=4; break; case 7: x=6; break; case 8: x=2; break; case 9: x=5; break; case 10: x=0; break; case 11: x=3; break; case 12: x=5; break;

bry er inte om vilka siffror man får ut

Permalänk
Medlem

Nja, ser på rak arm flera fel.
Det finns inget logiskt villkor efter ditt "else if".
Kanske ville du skriva bara "else" ?
Och vad gör en ensam vänstermåsvinge parentes efter switch ? Borde väl vara en högerparentes för att sluta vänsterparentesen.
Sedan har du inga våsvingar alls i första switch satsen.
Du har inte heller några måsvingar efter if eller else if(som bör vara else).

Visa signatur

Namn : Jesper | Ålder : 45 | In-game namn : iller
Yrke : Matematisk modellerare (finansiell matematik), mjukvaruutvecklare för risksystem.
Utbildning : Doktor i matematik + en del mat-stat, numme och IT-relaterat.

Permalänk
Medlem
Skrivet av JesperT:

Nja, ser på rak arm flera fel.
Det finns inget logiskt villkor efter ditt "else if".
Kanske ville du skriva bara "else" ?
Och vad gör en ensam vänstermåsvinge parantes efter switch ?

om jag bara har else får jag ett error som säger error: 'else' without a previous 'if'
och missade vänstermåsvinge parantes då jag kopierade

Permalänk
Medlem

Jah har otroliga svårigheter med att läsa din post.

Skickades från m.sweclockers.com

Visa signatur

4690K - H110 ¶ Fractal R5 ¶ MSI KRAIT SLI ¶ EVGA SC GTX970 ¶
Samsung 500GB EVO ssd ¶ WD 2TB ¶ HYPERX 16GB ¶ Be Quiet! 700W KRAFT ¶

AKG K272 HD ¶ M-Audio Fast track MkI

Permalänk
Medlem

Du har inte inringat det som ska göras efter det första if med måsvingar, inte heller det som ska göras efter "else".
dvs du borde skriva
if(bla bla)
{
Gör detta
}
else
{
Gör detta
}

Samma med switch satserna dvs skriv
switch(bla bla)
{
massa case
}

Visa signatur

Namn : Jesper | Ålder : 45 | In-game namn : iller
Yrke : Matematisk modellerare (finansiell matematik), mjukvaruutvecklare för risksystem.
Utbildning : Doktor i matematik + en del mat-stat, numme och IT-relaterat.

Permalänk
Medlem

Gör alla switch cases först och därefter gör din if koll. Problemet var (delvis) för dig om det var skottår, och månad 3-12, så skulle den ge... jag vet inte vad.

switch(month){ case 1: if ((year) % 400 == 0 || ((year) % 100 != 0 && (year) % 4 == 0)) x = 13; else x = 1; break; case 2: if ((year) % 400 == 0 || ((year) % 100 != 0 && (year) % 4 == 0)) x = 14; else x = 2; break; case 3: x = 3; break; case 4: x = 4; break; case 5: x = 5; break; case 6: x = 6; break; case 7: x = 7; break; case 8: x = 8; break; case 9: x = 9; break; case 10: x = 10; break; case 11: x = 11; break; case 12: x = 12; break; default: x = 0; break; }

Permalänk
Medlem
Skrivet av JesperT:

Nja, ser på rak arm flera fel.
Det finns inget logiskt villkor efter ditt "else if".
Kanske ville du skriva bara "else" ?
Och vad gör en ensam vänstermåsvinge parentes efter switch ? Borde väl vara en högerparentes för att sluta vänsterparentesen.
Sedan har du inga våsvingar alls i första switch satsen.
Du har inte heller några måsvingar efter if eller else if(som bör vara else).

If satser behöver inte ha måsvingar om det bara är en rad. Det kan vara förvirrande nu, men eftersom Switchen är på raden under så räknas hela alltet som en rad, då switch satsen är sin "egna funktion".

Permalänk
Medlem
Skrivet av Reyintaz:

If satser behöver inte ha måsvingar om det bara är en rad. Det kan vara förvirrande nu, men eftersom Switchen är på raden under så räknas hela alltet som en rad, då switch satsen är sin "egna funktion".

Mja, om det bara är en rad så behövs inga måsvingar.
Dock verkar felet han får tyda på att kompilatorn inte ser else satsen som nästföljande "rad", så något är fel.

Hur är det med måsvingarna efter switch(bla bla) ?
Jag brukar alltid göra måsvingar efter switch iallafall och man gör ju här en massa nya rader med alla semikolon.
Skulle tro att de är obligatoriska, men har inte testat att skriva utan själv dock.
Dessa måsvingar saknas i den första switch satsen.

Är man lite osäker är det hursomhelst bättre med ett par måsvingar för mycket än för lite.
Dessutom kan det bli problem om någon senare försöker lägga till något som ska göras i när ett villkor är sant i en if sats och missar att det saknas måsvingar i och med att det bara var en rad. Lite av en smaksak dock.

Visa signatur

Namn : Jesper | Ålder : 45 | In-game namn : iller
Yrke : Matematisk modellerare (finansiell matematik), mjukvaruutvecklare för risksystem.
Utbildning : Doktor i matematik + en del mat-stat, numme och IT-relaterat.

Permalänk
Medlem

nu ser det ut såhär men får inte de andra svaret om det är skottår

switch (month) { case 1: if ((century* 100+year) % 400 == 0 || ((century* 100+year) % 100 != 0 && (century* 100+year) % 4 == 0)) {x= day - 1;} else x = 0; break; case 2: if ((century* 100+year) % 400 == 0 || ((century* 100+year) % 100 != 0 && (century* 100+year) % 4 == 0)); {x = 2;} else x=3; break; case 3: x=3; break; case 4: x=6; break; case 5: x=1; break; case 6: x=4; break; case 7: x=6; break; case 8: x=2; break; case 9: x=5; break; case 10: x=0; break; case 11: x=3; break; case 12: x=5; break; }

Permalänk
Medlem

Lite svårt att veta vad du vill åstadkomma.
Det kommer ut lite x som är lite allt möjligt beroende på vilken månad du har (och vad year, day och century är).
Vad stoppar du in och vad förväntar du dig att svaret ska bli ?

Case 1 och 2 har ju också ett helt annat innehåll än i det ursprungliga inlägget ?

Visa signatur

Namn : Jesper | Ålder : 45 | In-game namn : iller
Yrke : Matematisk modellerare (finansiell matematik), mjukvaruutvecklare för risksystem.
Utbildning : Doktor i matematik + en del mat-stat, numme och IT-relaterat.

Permalänk
Medlem

jag ska räkna ut vilken dag ett specifikt datum är, har en algoritm som funkar men för att den ska funka till 100% måste jag få bort en dag på januari och februari om de året är ett skottår eftersom i januari och februari har inte skott-dagen kommit därför måste man ta bort.

Permalänk
Medlem
Skrivet av lalino:

nu ser det ut såhär men får inte de andra svaret om det är skottår

switch (month) { case 1: if ((century* 100+year) % 400 == 0 || ((century* 100+year) % 100 != 0 && (century* 100+year) % 4 == 0)) {x= day - 1;} else x = 0; break; case 2: if ((century* 100+year) % 400 == 0 || ((century* 100+year) % 100 != 0 && (century* 100+year) % 4 == 0)); {x = 2;} else x=3; break; case 3: x=3; break; case 4: x=6; break; case 5: x=1; break; case 6: x=4; break; case 7: x=6; break; case 8: x=2; break; case 9: x=5; break; case 10: x=0; break; case 11: x=3; break; case 12: x=5; break; }

Själva switch och if satserna ska fungera, det enda som återstår är parametern du stoppar in i if-satserna. Vad händer med centuary? För i det jag länkade förut (koden) så gick de komma in i alla if satser tror jag. Dock testade jag bara med 2000 och 2001-2003

Permalänk
Medlem

programmet ska kunna säga vilken veckodag ett specifik datum är
om jag skriver in vilket datum som helst och vilket år som helst som inte är ett skottår får jag ut rätt dag MEN om jag skriver ett datum som är i januari eller februari i ett skottår så får jag ut tex tisdag men det är egentligen en måndag måste därför ta bort en dag i de månaderna får att få ut rätt veckodag, vet inte hur mer tydlig jag kan vara

century är alltså tex 19 eller 20 för att sedan få ut vilket år man använder får man ta de *100+ vilket år man ville ha de är helt enkelt för att se om året är ett skottår eller inte