10 svar
1527 visningar
delz behöver inte mer hjälp
delz 50
Postad: 25 jan 2018 12:05

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Å 842
Postad: 25 jan 2018 12:20

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 43
Postad: 25 jan 2018 15:37

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 50
Postad: 25 jan 2018 18:32

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Å 842
Postad: 25 jan 2018 18:39 Redigerad: 25 jan 2018 18:41

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 50
Postad: 25 jan 2018 18:49

Ä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Å 842
Postad: 25 jan 2018 19:53 Redigerad: 25 jan 2018 20:02

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 50
Postad: 25 jan 2018 20:22

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

PeterÅ 842
Postad: 25 jan 2018 20:49

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 50
Postad: 25 jan 2018 22:57

Tack för dem bra tipsen!

Ironboy 15 – Fd. Medlem
Postad: 15 jun 2020 20:44 Redigerad: 15 jun 2020 20:46

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
Close