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;
}
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?
Vad är det här "Number" för nåt? Är det du visar verkligen hela programmet?
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:
…
}
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.
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??
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:(
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 !
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.
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?
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!
Du ska inte flytta en parentes, du ska ta bort många parenteser...
if (villkor) {
...;
}
else if (villkor) {
...;
}
else {
...;
}
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å.
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.
Ä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;
}
}
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.
Ska försöka göra om lite i uppgiften, tack för alla tips:)
Du kan utnyttja att JavaScript är ganska bra på att räkna på datum :)
// year = 4 digits, month 1-12, date 1-28...31
function dayNumber(year, month, date) {
let d = new Date(year, month - 1, date).getTime(), co = 0;
while (new Date(d - ++co * 24 * 60 * 60 * 1000).getFullYear() === year) { }
return co;
}
// Test
console.log(dayNumber(2000, 3, 1)); // 60
console.log(dayNumber(2019, 3, 1)); // 60
console.log(dayNumber(2020, 3, 1)); // 61 (leap year)
console.log(dayNumber(2020, 12, 31)); // 366 (leap year)