Pokaż wyniki 1 do 5 z 5

Temat: [PERL] Skrypt wczytujący liczbę 123 i wyświetlający ciąg znaków jeden dwa trzy

  1. #1
    Zarejestrowany
    Dec 2012
    Postów
    7

    Domyślnie [PERL] Skrypt wczytujący liczbę 123 i wyświetlający ciąg znaków jeden dwa trzy

    Witam serdecznie. Dostałem zadanie, które potrafię zrobić w C# ale nie w PERLU (jako że jestem i w tym i w tym newbie...). We wtorek kolokwium. Czy jest ktoś w stanie pomóc?

    Napisz skrypt wczytujący z konsoli liczbę całkowitą z przedziału od 0 do 1 000 000. Skrypt ma
    posłużyć się słownymi nazwami cyfr i wypisać wartość tej liczby słownie na konsolę.
    Np.: dla 23512 ma wypisać z odstępami ciąg znaków:
    dwa trzy pięć jeden dwa

    Największy kłopot to brak możliwości przeszukiwania łańcuchu znaków za pomocą indeksu tak jak tutaj: cyfra = liczba[a];
    Chyba że ja nie wiem że coś takiego istnieje..


    Kod w C#
    Kod:
    Console.WriteLine("wpisz liczbe ");
    string liczba = Console.ReadLine();
    for (int a = 0; a < liczba.Length; a++)
    {
    char cyfra = liczba[a];
    Console.Write(czytacz(cyfra));
    }
    Console.ReadLine();
    }
    public static string czytacz(char x)
    {
    
    switch (x)
    {
    case '1':
    return "jeden ";
    case '2':
    return "dwa ";
    case '3':
    return "trzy ";
    case '4':
    return "cztery ";
    case '5':
    return "piec ";
    case '6':
    return "szesc ";
    case '7':
    return "siedem ";
    case '8':
    return "osiem ";
    case '9':
    return "dziewiec ";
    case '0':
    return "zero ";
    }
    return "blad";
    }
    }
    }

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Dwa sposoby blyskawicznie zalatwiaja problem:

    Kod:
    #!/usr/bin/perl
    # tablica zawierajaca nazwy cyfr, zogdna z indeksami tabeli
    my @t = qw/zero jeden dwa trzy cztery piec szesc siedem osiem dziewiec/;
    my $liczba=23512;
    
    # liczbe zmieniamy na tablice cyfr i dla kazdea traktujemy jako indeks tablicy
    map {
      print "$t[$_] ";
    } split '', $liczba;
    
    # potega wyrazen regularnych - dopasowujemy globalnie pojedyncza cyfre i zamieniamy na wyraz z tablicy o podanym indeksie
    $liczba =~ s/(\d)/$t[$1] /g;
    print "$liczba\n";
    Perl potrafi byc niesamowicie efektywnym narzedziem, jesli wiemy jak go uzyc.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Dec 2012
    Postów
    7

    Domyślnie

    Problem jest.

    Na ekranie zamiast:
    dwa trzy pięć jeden dwa

    wyświetla się dwa razy:
    dwa trzy pięć jeden dwa dwa trzy pięć jeden dwa

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Problem jest - myslenie nie boli... zobacz do kodu dlaczego tak jest
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Jan 2009
    Postów
    836

    Domyślnie

    Po dwa trzy pięć jeden dwa trzeba albo przysłonić ekran i wtedy będzie poprawnie albo wywalić jedno print : )

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52