Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Yhteen- ja kertolasku (PHP)

Sivun loppuun

mizzou [22.09.2006 19:05:58]

#

Terve kaikille, olen aloittelija PHP:n saralla ja paljon olen apua talta palstalta loytanyt mutta nyt tuli seina vastaan. En muuten tieda etta onko tama kysymys oikean otsikon alla, jos ei ole niin pahoittelen tapahtunutta(jatkossa olen sitten viisaampi).

Eli yritan saada aikaiseksi scriptin joka yhteen laskee ja kertoo kaikki parittomat luvut valilta 1-1000(tuhat mukaan lukien). Tuloksena pitaisi olla kaksi saraketta, (yhteenlasku ja kertolasku). nayttaisi kuta kuinkin talta:
1+3=4 1*3=3
4+5=9 3*5=15
9+7=16 15*7=105
jne... jne...

Ongelma on se etta kaiken pitaisi onnistua YHDELLA silmukalla. Talla hetkella yritan tehda sita WHILE silmukalla. Yhteen laskun saan toimimaan kuten myos kertolaskun mutta en saa molempia toimimaan samalla silmukalla.
Kertolasku osat olen nyt komentoinut "pois" joten seuraava koodi tekee yhteen laskun ja tulostaa ne taulukkoon. Miten saan kertolaskun yhdistettya tuohon?

<?
$numYhteen=1;   //ensimmainen numero
$numYhteen2=$numYhteen+2;  //toinen numero joka on sama kuin ensimmainen lisattyna kahdella jotta siita tulee kolme
$tulosYhteen=$numYhteen+$numYhteen2;  //kahden edella mainitun summa

//kertolaskussa kaytan samaa kaavaa kuin yhteenlaskussa mutta nyt olen kommentoinut kertolaskua koskevat osiot pois
//$kerto=1;
//$kerto2=$kerto+2;
//$tulosKerto=$kerto*$kerto2;

	echo "<table border='1' cellpadding='3'>";
	echo "<caption>OTSIKKO</caption>";

while($numYhteen2<1000) { //TAHAN PITAISI KERTOLASKU JOTENKIN YHDISTAA($kerto2<1000)

	echo "<p><tr><td>$numYhteen + $numYhteen2 = $tulosYhteen</td></p\>\n";
	$numYhteen = $tulosYhteen;
	$numYhteen2 = $numYhteen2 + 2;
	$tulosYhteen = $numYhteen + $numYhteen2;

//ALLA ON TAPA JOLLA SAAN KERTOLASKUN TOIMIMAAN MUTTA EN YHDESSA YHTEENLASKUN KANSSA. TAPA ON IDENTTINEN YHTEENLASKU KAAVAN KANSSA
//	echo "<tr><td>$kerto * $kerto2 = $tulosKerto</td>\n";
//	$kerto = $tulosKerto;
//	$kerto2 = $kerto2 + 2;
//	$tulosKerto = $kerto + $kerto2;

}
//JOTTA SAAN LUVUN TUHAT YNNATTYA JOUDUIN TEKEMAAN SEURAAVAT KOLME RIVIA... JOS PYSTYN TUON TEKEMAAN HELPOMMIN NIIN KERTOKAA IHMEESSA.
$tulosYhteen = $tulosYhteen - 1001;
$lopputulos=$tulosYhteen+1000;
echo "<p><tr><td>$tulosYhteen + 1000 = $lopputulos</td></p>";
echo "</table>";
?>

Elikka tuollaisen olen saanut luotua (ei saa nauraa) :)
Asun Yhdysvalloissa ja suoritan tyoni ohella omasta mielenkiinnosta PHP aloittelija kurssia. Tama oli yksi tehtava jonka otin kurssilla vastaan mutta nyt tuntuu etta haukkasin liian ison palan. Kaikenlaiset neuvot otan avosylin vastaan. Ongelma voi olla naurettavan helppo mutta jostakin taytyy aloittaa;) Kiitoksia hienosta sivustosta ja kiitoksia jo etukateen kaikille vastanneille!!

-Matti

Antti Laaksonen [22.09.2006 19:24:12]

#

Jokaisella rivillä lisättävä tai kerrottava luku on sama. Et siis tarvitse erikseen muuttujia $numYhteen2 ja $kerto2, vaan voit käyttää samannimistä muuttujaa. Minä varmaan käyttäisin tässä tapauksessa for-silmukkaa, jolloin lisättävä ja kerrottava luku olisi silmukkamuuttuja. Tapaus tuhat on joka tapauksessa pakko käsitellä erikseen, kun sitä ei voi oikein yhdistää parittomien lukujen sarjaan.

Ohjelmasi on siis muuten täysin oikein tehty, kun vain käyt parittomat luvut läpi yhdessä ja samassa muuttujassa. Teinpä vielä esimerkiksi for-silmukkaa käyttävän ratkaisun:

<?php

$yhteen = 1;
$kerto = 1;

echo "<table>";

for ($luku = 3; $luku < 1000; $luku += 2) {
    $uusiyhteen = $yhteen + $luku;
    $uusikerto = $kerto * $luku;

    echo "<tr><td>$yhteen + $luku = $uusiyhteen</td>
              <td>$kerto * $luku = $uusikerto</td></tr>";

    $yhteen = $uusiyhteen;
    $kerto = $uusikerto;
}

// tähän pitäisi vielä lisätä tapaus 1000!

echo "</table>";

?>

mizzou [22.09.2006 21:51:15]

#

Kiitoksia ERITTAIN nopeasta vastauksesta.

Taytyy sanoa etta en ollut tuota FOR vaihtoehtoa harkitsenutkaan. Mutta kaikenlaista yritin mutten saanut tuota toimimaan. Kokeilin lopuksi ihan tuollaisenaan ja saman parse errorin antoi, ainoastaan rivi numero errorissa muuttui. Tuollaisenaan ku kokeilee niin parse error rivilla 10. Teenko jotain ihan vaarin kun en saa edes tuota vastaus mallia toimimaan?

Antti Laaksonen [22.09.2006 22:15:48]

#

Minun esimerkkini pitäisi toimia sellaisenaan, jos sen tallentaa PHP-tiedostoksi. Mitään erikoista koodissa ei ole.

Oletko varma, että virhe tulee juuri tuosta koodista? Saatko virheen pois poistamalla mainitun rivin? Mikä on koko virheilmoitus?

mizzou [22.09.2006 22:47:34]

#

Kopioin tuon koodin ja tallensin nimella testi.php ja antaa virheilmoituksen:

Parse error: parse error in /folder/folder/folder/www/testi.php on line 9

Aikaisemmin tekemani pikku scriptit toimii. Palvelin sijaitsee koulussa jossa kurssi on. FTP:lla aina siirran tiedostot palvelimella olevaan kansioon ja sitten selaimeen kirjoitan osoitteen. Vahan on kinkkinen toi ongelma :) Kiitoksia kauheesti sinulle Antti kun jaksat yrittaa.

Testasin hiukan lisaa:

Kun poistan kaikki valit tuosta sinun koodistasi niin sama virhe ilmoitus tulee mutta numero vaihtuu seitsemaan. Koodi nayttaa talta:

<?php
$yhteen = 1;
$kerto = 1;
echo "<table>";
for ($luku = 3; $luku < 1000; $luku += 2) {
	$uusiyhteen = $yhteen + $luku;
    $uusikerto = $kerto * $luku;
    echo "<tr><td>$yhteen + $luku = $uusiyhteen</td>
          <td>$kerto * $luku = $uusikerto</td></tr>";
    $yhteen = $uusiyhteen;
    $kerto = $uusikerto;
}

// tähän pitäisi vielä lisätä tapaus 1000!

echo "</table>";

?>

Mod. korjasi kooditagit!

juha127 [22.09.2006 23:03:42]

#

Tuon mukaan siis 9 rivillä olisi kirjoitusvirhe, mutta itse en ensi silmäyksellä näe siinä mitään. Kyllä muuten vaikuttaa toimivan vaan php:n kapasiteetti loppuu loppu päässä ja antaa tulokseksi INF

mizzou [22.09.2006 23:29:34]

#

Koodi minka Antti kirjoitti niin riville yhdeksan tulee minulla virheilmoitus mutta kun otan siita kaikki tyhjat valit pois (edellisessa viestissa koodi ilman valeja) niin virhe tulee riville seitseman.

juha127 [23.09.2006 08:44:20]

#

Tämä nyt on outoa, koodi nimittäin toimii itselläni oikein hyvin. Mikä php:n versio servulla hyrää(vaikka se ei tähän kyllä luulisi vaikuttavan)

Metabolix [23.09.2006 10:06:35]

#

Jospa tuon kahden rivin tulostuksen for-silmukassa laittaisi yhdelle riville? Toisinaan tuo nimittäin ei tahdo toimia.

mizzou [23.09.2006 17:04:16]

#

PHP:n versio nayttaisi oleevan 4.3.2.
Yritin tuota Antin mallia muokata mutta scripti ei mene tulostus riville asti koska virhe minulla tulee $uusikerto = $kert * $luku; rivilla. Tosi omituista. Mutta sain sen minun alkuperaisen scripin toimimaan jossa kaytan whole silmukkaa. Ongelma sen kanssa on sama kuin Juha yhdessa viestissa jo sanoi eli loppu paasta tulee INF. Tarkoittaako tuo ettei muuttujaan voi tallentaa niin isoa numeroa vai mita?

juha127 [23.09.2006 17:23:22]

#

Kyllä tarkoittaa tilan loppumista. Numero on liian suuri. Itselläni on php5 versio

php-Niko [23.09.2006 19:33:03]

#

Ai olet aloittelia vai? Mulle toi olisi mahdoton tehtävä :D

mizzou [27.09.2006 05:24:41]

#

Terve. Ilmoitan vain etta Antin koodin toimimattomuuteen loytyi ratkaisu joka voi kuulostaa oudolta.

Kun kopioin Antin koodin talta sivulta itselleni ohjelmaan jolla tyostan koodia niin se ei toiminut. Kaytin taman sivun selaamiseen Safarin selainta ja nyt huvikseni testasin Firefoxilla ja koodi toimii eli Safari jotenkin tekee koodista toimimattoman???

Jos talla palstalla on macin kayttajia niin mika on hyva koodin tyosto ohjelma? Itse kaytan TextWrangleria.

Kiitoksia viela kaikille avun tarjoajille ja sori Antti ku en huomannut heti kokeilla Firefoxia! Hyvaa syksya sinne Suomeen!!

kayttaja-2791 [27.09.2006 11:05:09]

#

Vielä yksi vinkki, voit kommentoida useamman rivin käyttämällä /* */ merkintöjä. Eli yllä olevasi koodinpätkä on mielestäni kätevämpi kommentoida pois näin:

//ALLA ON TAPA JOLLA SAAN KERTOLASKUN TOIMIMAAN MUTTA EN YHDESSA YHTEENLASKUN KANSSA. TAPA ON IDENTTINEN YHTEENLASKU KAAVAN KANSSA
/*
    echo "<tr><td>$kerto * $kerto2 = $tulosKerto</td>\n";
    $kerto = $tulosKerto;
    $kerto2 = $kerto2 + 2;
    $tulosKerto = $kerto + $kerto2;
*/

mizzou [27.09.2006 16:20:26]

#

Olen tuon kommentointi tavan joskus nahnyt mutta eipa tullut mieleen. Kiitokset neuvosta. Pitaa ottaa tuo kayttoon.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta