Theoneask Skrevet 4. februar 2008 Skrevet 4. februar 2008 (endret) Heisann. Har eit par oppgåver der eg skal bruke for-løkker til å lage trekantar. Den første eg skal lage skal sjå slik ut. 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Men slit litt med korleis eg skal komme fram til den der. Koden eg tok utgangspunkt fra er: <html><body> <title>Oppgåve 15</title> <pre> <?php //løsningen er å bygge opp en og en rad, men ikke skrive ut raden før den er ferdig oppbygd. for ($x=1; $x<=5; $x++){ $utskrift = ""; //Hver rad skal bestå av tall, men ikke flere enn antall rader vi har kommet til. for ($y=1; $y<=5; $y++){ $utskrift .= $y . " "; } echo $utskrift . "<br>"; } ?> </pre> </body></html> Har prøvd å gjer om på den der, men forstår eigentlig ikkje korleis det skal bli. Mulig at koden der er eit dårlig utgangspunkt, men klarte ikkje å begynne heilt fra start, so brukte den der. Koden er no ikkje endra på, og resultatet fra den blir: 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 Håper på hjelp. Endret 4. februar 2008 av TheOneAsk
BigJackW Skrevet 4. februar 2008 Skrevet 4. februar 2008 (endret) <?php for ( $i = 1; $i <= 5; $i++ ) { for ( $x = 1; $x <= $i; $x++ ) { $out .= $i . " "; } $out .= "<br />"; } echo $out; ?> Ikke verre enn som så. Gir: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Endret 4. februar 2008 av BigJackW
Flin Skrevet 4. februar 2008 Skrevet 4. februar 2008 Jeg har en løsning som fungere fint. Vet ikke om du vil ha hele siden det blir juks, men jeg kan jo gi deg noen hint. Oppgi først hvor mange linjer du skal ha. ( Fem i ditt tilfelle ) Så gjører du en for loop for fem rekker. Rekke nummer en er tall 1 og den skal skrives ut x ganger. Der x = rekke nummer. Da kan du legge inn en ny for loop og bruke rekke nummer til å indikere hva som skal skrives ut og hvormange ganger.
Theoneask Skrevet 4. februar 2008 Forfatter Skrevet 4. februar 2008 Ok, takk takk. Kunne du forklart litt av koden. $i blir då tala som går nedover, det er greit, $x blir tala som går bortover. Og nedover auker dei med 1 heilt til 5 på grunn av $i++. $x skal begynne på 1, den er grei, men korleis blir det andre gjort? $x <= $i; $x++ kunne du forklart den litt? Og bruken av $out. Takk for at tar deg tid
BigJackW Skrevet 4. februar 2008 Skrevet 4. februar 2008 (endret) <?php /** * Løkka kjører fra 1 til 5. */ for ( $i = 1; $i <= 5; $i++ ) { /** * Løkke starter på 1 og øker antall ganger den skal kjøre, * med $i fra den forrige løkka. Dvs.: Denne indre løkka kjører * èn gang mere for hver runde den ytterse løkka kjører. * Første runde: 1, * Andre runde: 2, * Trejde runde: 3 osv. */ for ( $x = 1; $x <= $i; $x++ ) { /** * Denne variablene blir det samme som du har brukt $utskrift. * Dog er det dårlig vane og bruke norske navn på variabler, * funksjoner osv. */ $out .= $i . " "; } /** * For hver runde den ytterse løkka kjører legger den inn et linjeskift. */ $out .= "<br />"; } /** * Skrive ut inneholdet i $out-variabelen. */ echo $out; ?> Dårlig forklart ... Endret 4. februar 2008 av BigJackW
grimjoey Skrevet 4. februar 2008 Skrevet 4. februar 2008 (endret) for ( $i = 1; $i == 1; $i = 0 ) { print " 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 "; } Endret 4. februar 2008 av grimjoey
Theoneask Skrevet 4. februar 2008 Forfatter Skrevet 4. februar 2008 Ok, ting ser i alle fall litt lysare ut Takk for alle svara, alltid nytte å lese gjennom både kode og tekst hint. Visst eg ville ha trekanten som ein pyramide, blir ei endring i utskriftsetninga då eller nokon anna plass?
Mads-b Skrevet 5. februar 2008 Skrevet 5. februar 2008 (endret) Pyramide? Spamme topplinja med mellomrom da eller? $antall_linjer = 5; //antall linjer for($i=0; $i<$antall_linjer; $i++) { //loop 5 ganger $numletters = 2*$i+1; //kalkulerer antall bokstaver på linja $maxnumletters = 2*$antall_linjer+1; //kalkulerer max antall bokstaver $spaces = ($maxnumletters-$numletters)/2; //mellomrom før linja.. for($k=0;$k<$spaces;$k++) { //print spaces $out .= ' '; } for($n=0;$n<$numletters;$n++) { //print bokstaver $out .= $i; } $out .= "\n"; //newline } echo $out; *puh*.. vanskelig eksempel. Om noen har en bedre løsning, notify me.. EDIT: ikke testet, så output kan bli spennende.. EDIT2: fixed.. ^^ Endret 6. februar 2008 av Mads-b
avalandon Skrevet 5. februar 2008 Skrevet 5. februar 2008 *puh*.. vanskelig eksempel. Om noen har en bedre løsning, notify me.. EDIT: ikke testet, så output kan bli spennende.. <div style="text-align:center"> $out </div> :!:
Mads-b Skrevet 5. februar 2008 Skrevet 5. februar 2008 Hvis du skal ha en ASCII-korrekt pyramide er fremdeles min løsning best ^^
BigJackW Skrevet 5. februar 2008 Skrevet 5. februar 2008 (endret) Hvis du skal ha en ASCII-korrekt pyramide er fremdeles min løsning best ^^ Hvordan vet du det? Du sa jo du ikke hadde testet den ... Bare et rask øyekast på koden, så ser jeg to feil som gjør at den ikke fungerer. Og jeg sier bare en ting: INDENTERING Endret 5. februar 2008 av BigJackW
Kimble Skrevet 5. februar 2008 Skrevet 5. februar 2008 *puh*.. vanskelig eksempel. Om noen har en bedre løsning, notify me.. EDIT: ikke testet, så output kan bli spennende.. <div style="text-align:center"> $out </div> :!: Hehehe tror det var den beste jeg har sett i php forumet Hoff.. er kanskje litt nerd når man syns sånt er morsomt..
Theoneask Skrevet 5. februar 2008 Forfatter Skrevet 5. februar 2008 (endret) Har løyst pyramide koden. <?php for($i=1; $i<=5; $i++) { for($x=5; $x>$i; $x--) { echo " "; } for($j=0; $j<$i; $j++) { echo "$i "; } echo "<br />"; } ?> Blir slik: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 Men prøver no å lage det same med while-løkker. Berre at den skal vere opp ned då. 55555, so 4444 osv. Har komt fram til dette: <?php $i=5; while ($i>=1) { $x=5; while ($x<$i) {$x--;} { echo (" "); } $j=0; while ($j<$i) {$j++;} { echo "$i "; } echo "<br />"; {$i--;} } ?> Men resultatet blir då. 5 4 3 2 1 Manglar som dåke ser, ein del tal. Edit: Formatering på pyramiden blir litt feil her, men uansett den koden er rett. Endret 5. februar 2008 av TheOneAsk
Theoneask Skrevet 5. februar 2008 Forfatter Skrevet 5. februar 2008 Fordi det visst nok er veldig viktig å bli flink på løkker Men berre eit lite hint til kor i koden det er feil, slik at eg kan sjå om eg finner det hadde vore flott.
BigJackW Skrevet 5. februar 2008 Skrevet 5. februar 2008 (endret) Altså, denne for-løkka: <?php for ( $i = 0; $i < 10; $i++ ) { $out .= $i . "\n"; } ?> Fungerer på samme måte som denne while-løkka: <?php $i = 0; while ( $i < 10 ) { $out .= $i . "\n"; $i++; } ?> for-løkker brukes til å kjøre en løkke x antall ganger while-løkker brukes til hente f.eks. stuff ut fra db, inntil den returnerer false foreach-løkker brukes til å loope igjennom array. Nå vet jeg det er noen her på forumet som bruker while i stede for for, da den er umerbarkt raskere. Les bl.a. litt om det url Endret 5. februar 2008 av BigJackW
avalandon Skrevet 5. februar 2008 Skrevet 5. februar 2008 Fordi det visst nok er veldig viktig å bli flink på løkker Men berre eit lite hint til kor i koden det er feil, slik at eg kan sjå om eg finner det hadde vore flott. Det blir jo mye det samme: $i=5; //while 5 ganger.... while ($i>=1){ $x=5; //while x er STØRRE enn i, mellomrom while($x>$i){ $x--; echo " "; } $j=0; while($j<$i){ $j++; echo $i; } echo "<br />"; $i--; }
Theoneask Skrevet 5. februar 2008 Forfatter Skrevet 5. februar 2008 Ok flott takker Problemet var då at eg hadde echo i eigen {} og eine likhetstegnet var feil vei.
Mads-b Skrevet 6. februar 2008 Skrevet 6. februar 2008 Hvordan vet du det? Du sa jo du ikke hadde testet den ... Bare et rask øyekast på koden, så ser jeg to feil som gjør at den ikke fungerer. Og jeg sier bare en ting: INDENTERING Jeg identerer vanligvis, men koden ble skrevet på skolePC'en i nettleseren. TAB funker ikke Fremdeles fryktelig nysgjerrig på om koden funker da ^^ Men hvordan er identering to feil?
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå