16 svar
112 visningar
rash_2010@live.se 6
Postad: 12 nov 2018 Redigerad: 12 nov 2018

JavaScript

Hej!

Jag försöker skriva en kod som räknar ut vilket nummer en viss dag har under ett år. Dagarna numreras från 1 till 365 eller från 1 till 366 om det är ett skottår.  Om det t.ex. är februari ska man lägga 31 till det inmatade värdet för dag. Om det gäller senare månader måste man ta hänsyn till att februari har 29 dagar när det är skottår.  Jag skrev min kod (se nedan) men vet inte varför den vill inte köra!! 

 

 

function klickade() {
let svar1 = ruta1.value;
let svar2 = ruta2.value;
let svar3 = ruta3.value;
let ar = Number(svar1);
let mon = Number(svar2);
let dag = Number (svar3);
let antal_dagar = 0;
let i=30;
}

for (k = 1; k <== mon; k=k+1) {
if (k= 1 || k=3 || k=5 || k=7 || k=8 || k=10 || k= 12) {
antal_dagar = antal_dagar + 31;
}
}
else {
if (k=4 || k=6 || k=9 || k=11) {
antal_dagar = antal_dagar + 30;
}
}
else {
if (ar % 4 == 0 && ar % 100 !=0) || ar % 400 ==0 && k=2) {
antal_dagar =antal_dagar + 29;
}
}
else {
if (ar % 4 != 0 && ar % 100 ==0) || ar % 400 !=0 && k=2) {
antal_dagar =antal_dagar + 28;
}
}
antal_dagar = antal_dagar + dag;
}

Laguna 1734
Postad: 12 nov 2018

Allt den gör är sätter den lokala variabeln antal_dagar. Hur vill du få veta vad resultatet blir? Ingår det i uppgiften att presentera det på något särskilt sätt? 

Laguna 1734
Postad: 12 nov 2018

Vad är det här "Number" för nåt? Är det du visar verkligen hela programmet?

Affe Jkpg 3569
Postad: 12 nov 2018
rash_2010@live.se skrev:

Hej!

Jag försöker skriva en kod som räknar ut vilket nummer en viss dag har under ett år. Dagarna numreras från 1 till 365 eller från 1 till 366 om det är ett skottår.  Om det t.ex. är februari ska man lägga 31 till det inmatade värdet för dag. Om det gäller senare månader måste man ta hänsyn till att februari har 29 dagar när det är skottår.  Jag skrev min kod (se nedan) men vet inte varför den vill inte köra!! 

 

 

function klickade() {
let svar1 = ruta1.value;
let svar2 = ruta2.value;
let svar3 = ruta3.value;
let ar = Number(svar1);
let mon = Number(svar2);
let dag = Number (svar3);
let antal_dagar = 0;
let i=30;
}

for (k = 1; k <== mon; k=k+1) { // Dubbla ==?
if (k= 1 || k=3 || k=5 || k=7 || k=8 || k=10 || k= 12) {
antal_dagar = antal_dagar + 31;
}
} //Fel som sedan upprepar sig !
else {
if (k=4 || k=6 || k=9 || k=11) {
antal_dagar = antal_dagar + 30;
}
}
else {
if (ar % 4 == 0 && ar % 100 !=0) || ar % 400 ==0 && k=2) {
antal_dagar =antal_dagar + 29;
}
}
else {
if (ar % 4 != 0 && ar % 100 ==0) || ar % 400 !=0 && k=2) {
antal_dagar =antal_dagar + 28;
}
}
antal_dagar = antal_dagar + dag;
}

Kolla bl.a. dina parenteser {…} 

När du skriver fel parenteser "dödar" du for-loopen efter första if-villkoret.

Jag kan tycka att din kod skulle vara elegantare om du i stället tillämpar:
switch (k){
   case 1:
   case 3:
   …

}


Laguna 1734
Postad: 13 nov 2018

Det torde finnas ett sätt att se felmeddelanden. I en browser heter det ofta "Javascript console" eller något sådant, och man får fram den genom "Developer Tools" eller något sådant. Om det finns ett syntaxfel så står det där.

rash_2010@live.se 6
Postad: 13 nov 2018

 Hej !

just det, den ska fungera på så sätt att resultatet måste redovisas så som nedan:

År?

sen kommer inmatningrutan

Månad?

sen kommer inmatnigsrutan

Dag?

sen kommer inmatningsrutan

Beräkna

sedan räknar koden vilket datum dagen har under ett visst år

...............................................................................................................

och här kommer hur jag tänkte före det stycket jag postade innan med att jag skapade frågorna och inmatningsrutorna och de fungerar

"use strict";
// fråga
let fraga1 = document.createElement("p");
document.body.appendChild(fraga1);
fraga1.innerHTML = "År?";
let ruta1 = document.createElement("input");
document.body.appendChild(ruta1);
ruta1.focus();

let fraga2 = document.createElement("p");
document.body.appendChild(fraga2);
fraga2.innerHTML = "Månad?";
let ruta2 = document.createElement("input");
document.body.appendChild(ruta2);

let fraga3 = document.createElement("p");
document.body.appendChild(fraga3);
fraga3.innerHTML = "Dag?";
let ruta3 = document.createElement("input");
document.body.appendChild(ruta3);

// Beräkna
let knapp = document.createElement("button");
document.body.appendChild(knapp);
knapp.style.marginLeft = "10px";
knapp.innerHTML = "Beräkna";
knapp.onclick = klickade;

// Resultat
let resultat = document.createElement("p");
document.body.appendChild(resultat);

 

Jag vet att jag har gjort fel någonstans kanske med if satserna och som gör att programmet vill inte köra!! Något tips??

rash_2010@live.se 6
Postad: 13 nov 2018

 Jag testade att ha "måsparentes" för for-loop nån annan stans med det visar fortfarande fel meddelande:(

Jag vet tyvärr inte hur man använder switch-funktion i JavaSkript! Har inte kommit så långt:( 

Affe Jkpg 3569
Postad: 13 nov 2018
rash_2010@live.se skrev:

 Hej !

just det, den ska fungera på så sätt att resultatet måste redovisas så som nedan:

År?

sen kommer inmatningrutan

Månad?

sen kommer inmatnigsrutan

Dag?

sen kommer inmatningsrutan

Beräkna

sedan räknar koden vilket datum dagen har under ett visst år

...............................................................................................................

och här kommer hur jag tänkte före det stycket jag postade innan med att jag skapade frågorna och inmatningsrutorna och de fungerar

"use strict";
// fråga
let fraga1 = document.createElement("p");
document.body.appendChild(fraga1);
fraga1.innerHTML = "År?";
let ruta1 = document.createElement("input");
document.body.appendChild(ruta1);
ruta1.focus();

let fraga2 = document.createElement("p");
document.body.appendChild(fraga2);
fraga2.innerHTML = "Månad?";
let ruta2 = document.createElement("input");
document.body.appendChild(ruta2);

let fraga3 = document.createElement("p");
document.body.appendChild(fraga3);
fraga3.innerHTML = "Dag?";
let ruta3 = document.createElement("input");
document.body.appendChild(ruta3);

// Beräkna
let knapp = document.createElement("button");
document.body.appendChild(knapp);
knapp.style.marginLeft = "10px";
knapp.innerHTML = "Beräkna";
knapp.onclick = klickade;

// Resultat
let resultat = document.createElement("p");
document.body.appendChild(resultat);

 

Jag vet att jag har gjort fel någonstans kanske med if satserna och som gör att programmet vill inte köra!! Något tips??

 Du ser inte var jag markerat:
} //Fel som sedan upprepar sig !

Laguna 1734
Postad: 13 nov 2018

Kommentarer utöver det som Affe skriver om innehållet i funktionen:

 

Du skriver "felmeddelande", men vad är felmeddelandet? Hela.

 

Du gör element och en knapp som kör funktionen, men hur ska det som funktionen räknar ut hamna i 'resultat'?

 

För att kolla om funktionen körs alls: låt den göra nästan ingenting utom att smälla upp en alert-ruta.

rash_2010@live.se 6
Postad: 14 nov 2018

Hej Affe! Jag har förstått av din kommentar att placeringen för } är fel för den dödar if-satsen där! Jag har försökt att placera det efter den sista if-satsen men får samma felmeddelande som gör att jag inte kan köra programmet för att se om jag skrev koden rätt. Något tips på vad kan ha gått för fel?

rash_2010@live.se 6
Postad: 14 nov 2018

Hej Laguna

Det enda felmeddelandet jag får är att den pekar mot for-loopen där det står "missing '==' " och därför bytte jag från '='  till  '==' (med tanke på att det ska vara bara ett likhetstecken och inte dubbla)  men ändå den vägrar köra! 

Affe Jkpg 3569
Postad: 14 nov 2018

Du ska inte flytta en parentes, du ska ta bort många parenteser...

if (villkor) {
...;
}
else if (villkor) {
...;
}
else {
...;
}

Laguna 1734
Postad: 15 nov 2018

För att undvika förvirring använder man olika ord för de olika parenteserna: () är parenteser, [] hakparenteser och {} krullparenteser. Klamrar säger man ofta om {} också.

Laguna 1734
Postad: 15 nov 2018

Om man kan bör man använda en editor som hjälper till att indentera så det blir läsligt, dvs. skjuta in raderna så att det framgår vilken grupp av satser de hör till. T.ex. så här:

 

for (k = 1; k <= mon; k=k+1) {
     if (k= 1 || k=3 || k=5 || k=7 || k=8 || k=10 || k= 12) {
         antal_dagar = antal_dagar + 31;
     }
}

 

Då ser man mycket lätt om det är några klamrar för mycket, eller om de sitter fel. Och allt blir mycket lättare att överblicka.

Affe Jkpg 3569
Postad: 15 nov 2018

Även om jag har en editor som markerar klammerparen, brukar jag ändå skriva så här:
for (k = 1; k <= mon; k++)
{
     if (villkor)
     {
         antal_dagar += 31;
     }
}

Laguna 1734
Postad: 15 nov 2018
Affe Jkpg skrev:

Även om jag har en editor som markerar klammerparen, brukar jag ändå skriva så här:
for (k = 1; k <= mon; k++)
{
     if (villkor)
     {
         antal_dagar += 31;
     }
}

Javisst, det är en stilfråga. Även i C eller C++ finns båda stilarna. Om man samarbetar i ett projekt bör alla använda samma stil, men annars spelar det ingen roll.

rash_2010@live.se 6
Postad: 18 nov 2018

Ska försöka göra om lite i uppgiften, tack för alla tips:)

Svara Avbryt
Close