10 svar
818 visningar
delz är nöjd med hjälpen
delz 56
Postad: 25 jan 2018

for loop problem - skriva baklänges

"Skriv ett script som tar emot en text i en inmatningsruta. Sedan ska texten skrivas baklänges och visas i en meddelanderuta.
Lösningstips:
- Låt en inmatingsruta ta emot textsträngar (metoden prompt())
- Egenskapen length hos en textsträng ger dig antalet bokstäver i den
- En for-slinga som upprepas lika många gånger som det finns bokstäver i textsträngen skriver en ny textsträng som är den gamla skriven baklänges
- En meddelanderuta visar den nya textsträngen (metoden alert())

------


Förstår inte hur jag ska skriva for-slingan. Så här långt har jag kommit.

<!--Uppgift 4. ta emot text, skriv baklänges. -->

<html>
<head>
<title> Uppgift 4 </title>
</head>

<body>

<script>
var bak = prompt(' skriv in en text ', ' text ');

for(var i=0; i < bak.length; i = i + 1)
{

 

}

PeterÅ 1053 – Avstängd
Postad: 25 jan 2018

Tips: i = i + 1 kan skrivas som i++, i = i - 1 kan skrivas i--, i + 10 kan skrivas som i  += 10. Viktigt att veta om du ska programmera i javascript eller C / C++ / C#.

Du kan addressera ("nå") varje enskild bokstav i strängen med bak[i].
Gör om for-loopen så den går "baklänges", adressera sedan bak med dessa värden.

var backwards;

 

for (....) // Klura ut hur du ska skriva loopen
{
  backwards += bak[i];
}
alert(backwards);

IGIL 69
Postad: 25 jan 2018

I en variabel som innehåller texter har varje tecken i texten ett index. Texten "Hej" har H index 0, e index 1 och j index 2. Med hjälp av en for loop kan du "bygga om" din text variabel "bak" till en ny variabel ordBak som ska vara en spegling av ditt ord.

Programkoden kan se ut något som följande:

var ordBak;

for ( ... ) {

    ordBak = ordBak + bak[i]; //Här sätter du din text variabel till sig själv + index bokstaven (0,1,2,3 osv) till ditt                                                          variabel ord direkt.

    //eller

    ordBak += bak[i]; //Här lägger till till index bokstaven (0,1,2,3 osv) till din variabel direkt.

}

alert(ordBak);

bak[i] betyder att den hämtar bokstaven från index:et "i" från variabeln bak. Ifall bak är "Hej" och du skriver bak[1] så kommer den hämta bokstaven e. I ditt fall betyder detta att du måste börja med att hämta den sista bokstaven ur din text, bak, och jobba dig ner mot den första bokstaven som har index:et 0.

Fundera nu hur din for loop bör se ut. i ska börja från den sista bokstaven i ordet och fortsätta ner tills du kommer till den första bokstaven i ordet, index 0. 

Ifall något inte går ihop, fråga!

delz 56
Postad: 25 jan 2018

for ( var i = bak.length; i >= 0; i-- )

{

    ordBak += bak[i]; 

    

}

alert(ordBak);

 

När jag har matat in: "hej" så dyker det upp på meddelanderutan: "NaNjeh"...vet inte hur jag ska få bort NaN..

PeterÅ 1053 – Avstängd
Postad: 25 jan 2018 Redigerad: 25 jan 2018

Du har gjort rätt i princip. Du visste inte att bak[] är från 0 till längd - 1. Första bokstaven är alltså [0] och sista [längd - 1]. Ändra din loop från var i = bak.length till var i = bak.length - 1 så kommer det att fungera.

delz 56
Postad: 25 jan 2018

Är tacksam för era svar hittils.

Nu står det:

for ( var i = bak.length - 1; i >= 0; i-- )

{

    ordBak += bak[i]; 

    

}

alert(ordBak);

Men nu dyker det upp i meddelanderutan när jag skriver "hej" ----->  "undefinedjeh"

PeterÅ 1053 – Avstängd
Postad: 25 jan 2018 Redigerad: 25 jan 2018

Tror du får publicera hela koden här om vi ska kunna hjälpa ....
Innan du gör det: Lägg till:
var ordBak;

ordBak = "";
före (ovanför) for-loopen

Testa

delz 56
Postad: 25 jan 2018

Tusen tack för hjälpen! Nu funkar det!

PeterÅ 1053 – Avstängd
Postad: 25 jan 2018

Utmärkt!
Om du vill bli en bra programmerare i vilket språk som helst bör du använda vissa standardmetoder. För javascript bör du alltid definiera dina variabler först:
var i;
var bubble;
Fördelen med det är att om du stavar fel och skriver bubbel = 1 istället för bubble = 1 kommer du (troligtvis) få ett felmeddelande.
Ännu bättre: Börja varje funktion så här:
function abc()
{
    'use strict';
    var a;
    osv ...
}
use strict kommer att vägra att köra program med variabler som inte är deklarerade (var a;)
Mindre risk för felstavningar alltså!

 

 

... osv.

delz 56
Postad: 25 jan 2018

Tack för dem bra tipsen!

Ironboy 19
Postad: 15 jun 2020 Redigerad: 15 jun 2020

Det behövs ingen for-loop i detta fall - omvandla texten till en array, använd array-metoden reverse, omvandla tillbaka till text.

Hela programmet är en rad kod:

alert('Texten baklänges: ' + prompt('Skriv en text').split('').reverse().join(''));

Svara Avbryt
Close