11 svar
1146 visningar
delz är nöjd med hjälpen
delz 56
Postad: 9 feb 2018

Mata in siffror från användaren in i en array - Ta reda på medianen

<html>
<head>
<title> </title>
<body>
<script>
<!-- Jag har ett problem jag inte vet hur jag ska lösa. användaren matar in x antal siffror och avslutar med --> =, lägga in en siffrona i en array för att senare använda *utväljande sortering* och hitta medianen oavsett om antalet är jämnt/udda -->

<!-- här börjar problemet-->
do
{


var inmatat = prompt('Mata in tal och avsluta med --> =', '');
var x = eval(inmatat);
<!-- Vill lägga in mina x in i en array men vet  ej hur? -->
<!-- var arrTal = new Array(?????) -->


}

<!-- Här vill jag avsluta min do-while loop med tecknet -- > = -->

while(inmatat != '=');

<!-- Här har jag valt utväljande sortering, som ska sortera alla siffror för att skriva ut min median i ett senare skede. -->
<!-- "utväljande sortering" -->
for(i = 0;i < slut; i++)
{
minst = i;
for(j = i + 1; j <= slut; j++)
{
if(arrTal[j] < arrTal[minst])
{
minst = j;
}
temp = arrTal[minst];
arrTal[minst] = arrTal[i];
arrTal[i] = temp;
}

}

 

 

</script>
</body>
</html>

IGIL 69
Postad: 9 feb 2018 Redigerad: 9 feb 2018

Din array är nästan rätt. Det enda du behöver skriva för att skapa en array som kan lagra dina siffror är följande:

var arrTal = new Array();

För att sedan lägga in tal i din arraylist så måste du välja vilken plats i listan du ska lägga in ett tal på. Eftersom att listan nu är tom så måste vi börja med plats 0. För att lägga in ett tal på plats 0 skriver vi följande:

arrTal[0] = x;

Sedan ska vi lägga in ett nytt tal på en plats över i listan, i detta fall plats 1 och sedan 2. För att göra det rekommenderar jag att du skapar "var" i början av programmet som kanske heter listPlats = 0; För att börja på plats noll i listan. Det betyder att vi kan skriva:

arrTal[listPlats] = x;

Men, eftersom att listPlats alltid är lika med 0 måste vi höja värdet för varje tal vi skriver in.


Uppstår det några problem eller funderingar är det bara att fråga!

delz 56
Postad: 9 feb 2018

<html>
<head>
<title> </title>
<body>
<script>

var arrTal = new Array();
var i = 0;
do
{
var inmatat = prompt('Mata in tal och avsluta med --> =', '');
var x = eval(inmatat);
arrTal[i] = x;
i++;
}

while(inmatat != '='); <!-- När jag matar in =, då händer ingenting. -->
alert(arrTal); <!-- Detta skrivs ej ut.. -->


</script>
</body>
</html>

IGIL 69
Postad: 9 feb 2018 Redigerad: 9 feb 2018

Du försöker nu skriva ut en hel lista. Det kommer inte att gå eftersom att listan innehåller många värden. Javascripten vet inte vad i listan den ska skriva ut. Du måste lagra listans innehåll i en variabel som exempel, eller specificera vilken list plats du vill skriva ut.

delz 56
Postad: 10 feb 2018

<html>
<head>
<title> </title>
<body>
<script>
var siffor;
var arrTal = new Array();
var i = 0;
do
{
var inmatat = prompt('Mata in tal och avsluta med --> =', '');
var x = eval(inmatat);
arrTal[i] = x;
i++;
}

while(inmatat != '='); <!-- Misstänker att felet är här.. -->
alert(arrTal[0]); <!-- jag specifierade vilken jag ville skriva ut men gör ej det.. jag förstår även inte hur jag ska lagra listans innehåll i en variabel.. -->


</script>
</body>
</html>

IGIL 69
Postad: 10 feb 2018 Redigerad: 10 feb 2018

Kollade koden och ser nu vad som är felet som ledde till att den inte skriver ut. I detta fall är det ett logiskt fel då själva syntaxen/koden är rätt programmerat. Om vi kollar på raden då du sätter vad x är. Där tar vi vad vi matar in och gör om det till ett tal som vi sedan kan mata in i listan. När du skriver in '=' försöker den göra om texten '=' till ett tal, vilket inte går. Du måste alltså med ett if-statement kolla ifall det du inte skrivit in är lika med '='. Ifall det inte är lika med '=' kan koden där den sätter x köras. Förtydligande:

var x = 0;
if ( ... ) //Här ska du kolla så att det användaren skriver in INTE är lika med '='
{
    x = eval(inmatat);


Ifall du vill spara hela listan som ett tal kan du använda dig av en for-loop som går igenom listan och lägger till varje list tal till en variabel.

delz 56
Postad: 10 feb 2018

Har ändrat om i koden och har stött på min sista tankenöt:

var i;var j; var slut = arrTal.length - 1; var temp; var ut;
var avbryt = '=';
var arrTal = [];

alert('Förbered dig med maximalt 20 siffror som du vill beräkna medianen på');

for(i= 0; i < 20; i++)
{

var inmatat = prompt('Mata in siffror som ska beräkna medianen, avsluta med =',' ');

if(inmatat != avbryt)
{
var x = eval(inmatat);
arrTal[i] = x;
}

else
{
break;
}

}


for(i = 0;i < slut; i++)
{

minst = i;
for(j = i + 1; j <= slut; j++)
{
if(arrTal[j] < arrTal[minst])
{
minst = j;
}
}


temp = arrTal[minst];
arrTal[minst] = arrTal[i];
arrTal[i] = temp;

}


<!-- Här vill jag nu skriva ut medianen, oavsett om antalet tal är udda/jämnt. vet ej hur jag löser detta sista nu.. -->

IGIL 69
Postad: 10 feb 2018 Redigerad: 10 feb 2018

Medianen är det mittersta värdet. Eftersom att antalet tal som du skriver in är antagligen jämt eller ojämnt så måste du göra på olika sätt för att ta reda på mitten värdet. Börja med att ha två if-statements som gör olika saker beroende på ifall att listan innehåller ett ojämnt antal eller jämt.

if ( ... ) //Ifall användaren har skrivit in ett ojämnt antal tal 
{
    //Att göra: Hitta det mittersta värdet och skriv ut det
}
else if ( ... ) //Ifall användaren har skrivit in ett jämnt antal tal 
{
    //Att göra: Hitta de två mittersta talen, räkna ut medelvärdet av de två mittersta talen och skriv ut det
}

Tänk nu vad det ska vara innanför varje kod block!


Lycka till!

IGIL 69
Postad: 10 feb 2018 Redigerad: 10 feb 2018
delz skrev :

var i;var j; var slut = arrTal.length - 1; var temp; var ut;
var avbryt = '=';
var arrTal = [];

Du måste också ändra på en sak i denna kod. Du säger att slut ska vara lika med arrTal.length. Detta kommer inte funka på det sättet du vill. För det första så kommer den inte funka eftersom arrTal inte har blivit skapat. Men, senare när programmet körs och du fyller på listan så kommer arrTal att öka, vilket betyder att slut kommer vara ett gammalt tal, det tal när du först skapade den. Mitt tips är att byta ut delarna i koden från slut till arrTal.length-1 och strunta i att skapa en slut i början.

delz 56
Postad: 10 feb 2018

Ok jag är hittills med att jag behöver använda if-satser men.. vad skriver jag för att ta reda på ifall det är ett antal jämnt/udda tal?

 

samt hur hittar jag det mittersta värdet?

 

det är just dessa två jag har fastnat på..brist på kunskap.

IGIL 69
Postad: 10 feb 2018 Redigerad: 10 feb 2018

Du kan använda dig att arrTal.length/2 för att se ifall det blir 1 (jämt) eller 0.5 (ojämnt).


När du vill skriva ut det mittersta talet i en ojämn tal serie så kan vi också använda oss av arrTal.length. Ifall du har 7 tal och du vill välja det mittersta talet, tal 4, så kan du använda dig av arrTal.length och division. Testa runt lite teoretiskt och se vad du kan komma på. Ifall du vill kan du skriva upp t.ex:

T  T  T  T  T  T  T
          mitt
Hur ska jag mattematiskt få fram tal 4? (Använd arrTal.length)

När du väl har hittat det mittersta talet kan du skriva ut det med alert(arrTal[mitterstaTalet]);


Använd samma princip med att rita upp och kolla hur du ska matematiskt få fram de två mittersta talen ifall talserien är jämn. När du väl har hittat de två talen kan du skapa en:

var median = ( (arrTal[mitterstaEtt] + arrTal[mitterstaTvå]) / 2);
alert(median);

Ifall du verkligen inte kommer på kan jag alltid skriva och förklara!

Försök först själv!

delz 56
Postad: 11 feb 2018

Jag har löst det! Stort tack! 

Svara Avbryt
Close