Betűből szám algoritmus
2008-11-19T08:52:30+01:00
2008-12-02T00:15:07+01:00
2022-06-29T07:21:38+02:00
  • Hali!

    Konkrét kérdéseket a Tudástárban légy oly kedves felvetni. Ennek nincs köze sem a "betűből szám" problémához, sem a programozás-elmélethez.

    Mutasd a teljes hozzászólást!

  • <?php /* 5.) Készítsünk programot, melyben a $var_bool változó egy logikai értéket vesz fel, a $var_int változó pedig egy egész szám értéket. A $var_string változó ezután vegye fel az "alma" karakterlánc értéket, ha a $var_bool értéke igaz, a "körte" értéket, ha a $var_bool hamis és a $var_int kisebb, mint 100, és minden egyéb esetben a "cseresznye" értéket. Ezután a program írja ki a kimenetre a $var_string értékét! */ $var_bool = false; $var_int = 5; if($var_bool = true){ $var_string = "alma"; echo $var_string; } elseif(($var_bool = false) && ($var_int < 100)){ $var_string = "körte"; echo $var_string; } else{ $var_string = "cseresznye"; echo $var_string; } ?>

    Most kezdtem a PHP programozást és kellene egy kis segítség a fenti példával kapcsolatban. Mi, miért nem műxik és mit bénáztam el?

    Előre is köszönöm a válaszokat!
    Mutasd a teljes hozzászólást!
  • Na de ha valaki azt irja, hogy
    húszon-ra, tízen
    , akkor az jobb ha nem is megy a szamitogep kozelebe.
    Inkabb egy regenyt vagy egy "tanuljunk meg irni" konyvet adnek annak.
    Mutasd a teljes hozzászólást!
  • Hálás köszönet mindenkinek

    Az ötletek alapján sikerült megoldanom a feladatot.
    Mutasd a teljes hozzászólást!
  • Javaslom szólj a modinak, hogy a témát tegye át a tudástárba a visualbasic témákhoz.

    Már csak azért is, mert a tudástárban ilyen függvény eddig csak c-ben volt.
    Szöveg-szám konverter probléma - Tudástár - Prog.Hu

    szerk:
    java-ban is találtam egy témát:
    Szöveg-szám/ szám-szöveg konverter Java probléma - Tudástár - Prog.Hu


    polyjoe kódját annyival kiegészíteném, hogy sokan elírják a "huszon"-t húszon-ra, a "tizen"-t tízen-re.

    (látom a "kettő","két" stb dolgokra gondolt)
    Mutasd a teljes hozzászólást!
  • [off]
    Bocsi az offért.
    Néha jobb olvasni a Prog.Hu-t mint meghallgatni egy kabarét.



    Nem tudom merre induljak.

    Szerintem a Moszkva tér felé indulj. Onnan hamar ki lehet érni a Hűvös-völgybe.
    [/off]
    Mutasd a teljes hozzászólást!
  • Ötlet?


    Pld rekurzív darabolás. A legnagyobb kitevőjű egység segítségével háromfelé vágjuk a szöveget: 'bal' * 'egység' + 'jobb'

    Valahogy így:

    #!/usr/bin/perl -W use strict; my @hnev = ( "milliard", "millio", "ezer", "szaz" ); my @hertek = ( 10**9, 10**6, 10**3, 10**2 ); my @tnev = ( "tizen", "huszon", "harminc", "negyven", "otven", "hatvan", "hetven", "nyolcvan", "kilencven" ); my @tertek = ( 10, 20, 30, 40, 50, 60, 70, 80, 90 ); my @enev = ( "egy", "ketto", "ket", "harom", "negy", "ot", "hat", "het", "nyolc", "kilenc", "tiz" ); my @eertek = ( 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); sub ertek { my ($szoveg ) = @_; my ($bal, $jobb ); for( my $i=0; $i<scalar(@hnev); $i++ ){ return ertek($bal) * $hertek[$i] + ertek($jobb) if( ($bal,$jobb) = ($szoveg =~ m/^(.*)$hnev[$i](.*)$/i) ); } for( my $i=0; $i<scalar(@tnev); $i++ ){ return $tertek[$i]+ertek($jobb) if( ($jobb) = ($szoveg =~ m/^$tnev[$i](.*)$/i) ); } for( my $i=0; $i<scalar(@enev); $i++ ){ return $eertek[$i] if( $szoveg =~ m/^$enev[$i]$/i ); } return 0; } my $szoveg = "harommillionegyszazotvenhatezerharomszaznegyvenketto"; print "$szoveg = ", ertek( $szoveg ), "\n";
    Mutasd a teljes hozzászólást!
  • Mondjuk a Te linket számot ír ki szövegesen; de "az se rossz" feladat.
    Mutasd a teljes hozzászólást!
  • Igaz, bár lehet Szam és a függvény típusa eleve Double. Nem is beszélve esetleges negatív számokról.

    Vagy írjunk programot, ami szövegesen beírt képletet kiszámol "á négyzet plusz bé négyzet az ..."
    Mutasd a teljes hozzászólást!
  • juj eccer enis csinaltam ilyet vb(a)-ban :)
    http://prog.hu/tudastar/?op=view&kbid=9422

    az utolso hozzaszolas a figyelemre melto :P

    Mutasd a teljes hozzászólást!
  • Apróság:
    Nem csorbítva jelen kódremek értékét jelezném, hogy
    -2,147,483,648 -től 2,147,483,647 -ig működik.

    Amennyiben pl. hárommilliárd körüli érték is szerepelhet a konvertálandók között, pici módosítás segíthet:

    Pl.:

    Function Szamma(Mit As String) 'Dim Szam As Long, e As Long Dim e As Long Dim Szam Szam = CDec(0) . . . If Cmp("milliárd") Then If e = 0 Then Hiba Szam = CDec(Szam) + CDec(e) * 1000000000 e = EzerAlatt() End If
    Mutasd a teljes hozzászólást!
  • Nincs mit, enyém volt az élvezet.

    Mint láttad, először csak ötlet jött, de megtetszett a feladat, azért megírtam. Az én hibám, remélem, nem vettem el a programozási élményedet.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget!

    Ezért a kódért igazán megérdemelnék pontot is!


    Igazad van, megérdemled a pontot.

    Nem vártam kész megoldást, csak ötleteket, de így is jó.

    Ötlet is volt, és megoldás is. Adok 100 pontot!

    Mégegyszer köszi!
    Mutasd a teljes hozzászólást!
  • Egy kis VBA:

    Dim SzamStr As String Dim SzamPos As Integer Dim ErrStr As String 'a paraméter a szöveg, az eredmény a szám ' ha a végén ErrStr>"" akkor hiba volt Function Szamma(Mit As String) As Long Dim szam As Long, e As Long SzamStr = LCase(Mit) SzamPos = 1 ErrStr = "" szam = 0 e = EzerAlatt() If Cmp("milliárd") Then If e = 0 Then Hiba szam = szam + e * 1000000000 e = EzerAlatt() End If If Cmp("millió") Then If e = 0 Then Hiba szam = szam + e * 1000000 e = EzerAlatt() End If If Cmp("ezer") Then If e = 0 Then e = 1 szam = szam + e * 1000 e = EzerAlatt() End If If SzamPos <= Len(SzamStr) Then Hiba Szamma = szam + e End Function Private Function Egyesek() As Long If Cmp("egy") Then Egyesek = 1 Else _ If Cmp("kettő") Then Egyesek = 2 Else _ If Cmp("két") Then Egyesek = 2 Else _ If Cmp("három") Then Egyesek = 3 Else _ If Cmp("négyes") Then Egyesek = 4 Else _ If Cmp("négy") Then Egyesek = 4 Else _ If Cmp("öt") Then Egyesek = 5 Else _ If Cmp("hat") Then Egyesek = 6 Else _ If Cmp("hetes") Then Egyesek = 7 Else _ If Cmp("hét") Then Egyesek = 7 Else _ If Cmp("nyolc") Then Egyesek = 8 Else _ If Cmp("kilenc") Then Egyesek = 9 Else _ Egyesek = 0 End Function Private Function EzerAlatt() As Long Dim e As Long, e2 As Long e = Egyesek() If Cmp("száz") Then If e = 0 Then e = 1 e = 100 * e End If If e = 0 Or e >= 100 Then If Cmp("tíz") Then e = e + 10 ElseIf Cmp("húsz") Then e = e + 20 Else If Cmp("tizen") Then e = e + 10 Else _ If Cmp("huszon") Then e = e + 20 Else _ If Cmp("harminc") Then e = e + 30 Else _ If Cmp("negyven") Then e = e + 40 Else _ If Cmp("ötven") Then e = e + 50 Else _ If Cmp("hatvan") Then e = e + 60 Else _ If Cmp("hetven") Then e = e + 70 Else _ If Cmp("nyolcvan") Then e = e + 80 Else _ If Cmp("kilencven") Then e = e + 90 e2 = Egyesek() If e2 = 0 And ((e Mod 100) = 10 Or (e Mod 100) = 20) Then Hiba e = e + e2 End If End If EzerAlatt = e End Function Private Function Cmp(Ezzel As String) As Boolean Dim b As Boolean b = (Mid(SzamStr, SzamPos, Len(Ezzel)) = Ezzel) If b Then SzamPos = SzamPos + Len(Ezzel) Cmp = b End Function Private Sub Hiba() If ErrStr = "" Then ErrStr = SzamPos & ". karakter környékén hiba!" End Sub

    Miért nem a Tudástárban tetted föl a kérdést? Ezért a kódért igazán megérdemelnék pontot is!
    Mutasd a teljes hozzászólást!
  • Túl sok variáció nincs.

    - "egy", "kettő" ("két"), "három", ..."kilenc"
    - "tíz" ("tizen"), "húsz" ("huszon"), "harminc", ..."kilencven"

    azután a nagyságrendek: "száz", "ezer", "millió", "milliárd", ... (meddig vagy hajlandó elmenni? kvatrilliárd??)

    Ami izgalmasabb: kicsit a római számok mintájára kell felépíteni, vagyis elől lesznek egyesek meg tizesek meg százasok, utána hirtelen kiderül, hogy ez milliárd, aztán megint egy-tíz-száz, ami mondjuk millió, stb.

    Első közelítésben tételezd fel, hogy a beírás hibátlan. Utána, ha már működik, illene kiegészíteni azzal, hogy ne fogadja el az "abrakadabra" szót, és ne okozzon galibát a "tizenhúszezerszázezer"
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Programozz C-ben. Ott minden betű (char) egyben szám is.
    Mutasd a teljes hozzászólást!
  • Hello!

    Köszönöm, ez már használhatónak tűnik.

    Laci
    Mutasd a teljes hozzászólást!
  • Szerintem biztos, ami biztos, az elején dobáld el a szóközöket és a kötőjeleket, hátha valaki mégis más helyesírási szabályok szerint írja le a számot. Utána pedig menj a szöveg elejétől és keress olyan szavakra, amik előfordulhatnak: egy, kettő, három, ...., tizen, huszon, ...., száz, ezer, millió, milliárd, billió, .... Ha ilyenekre felbontottad, akkor már nem nagy művészet összerakni a számot.
    Mutasd a teljes hozzászólást!
  • Ötlet:

    - Először csináld meg max. háromjegyű számokra, ez elég könnyen átgondolható / implementálható. A szöveget egyszerű elemzéssel szét kell szedned az összetevőire, pl: három-száz-huszon-hét, vagy öt-száz-egy, vagy kilenc-száz-harminc, ilyenek. Egy ilyen felbontást nem nehéz számmá alakítani, javaslom az összetevők hátulról előre haladó feldolgozását.

    Ha ez már OK, akkor észrevesszük, hogy egy sokjegyű számot felbonthatunk ilyen háromjegyű számokból álló részekre (egy ilyen részt jelöljünk x-szel), és ekkor egy szám szintaxisa így fog kinézni pl.: x milliárd x millió x ezer x
    A részekre bontáskor persze az x-es részek is fel vannak bontva úgy mint fentebb. Ezzel a szemlélettel, a részeket hátulról előre haladva feldolgozva könnyen implementálható a feladat.
    Mutasd a teljes hozzászólást!
  • Köszönöm a gyors választ.
    Mutasd a teljes hozzászólást!
  • Szerintem a Moszkva tér felé indulj. Onnan hamar ki lehet érni a Hűvös-völgybe.
    Mutasd a teljes hozzászólást!
  • Hell Mindenki!

    Kellene egy olyan programot csinálnom, ami betűvel leírt számot számmá alakít. (A helyesírási szabály itt nem játszik.)

    pl: hárommiliónégyszázötvenhatezerháromszáznegyvenkettö - 3456342
    vagy
    hárommilióháromszázhat - 3000306

    Nem tudom merre induljak.

    Ötlet?

    Laci
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: Off-topik!
abcd