Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: PERL - dodawanie

  1. #1
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie PERL - dodawanie

    Dziś zacząłem się uczyć, jak programować w perlu.
    No i już sporo przejrzałem kursów, ale nie znalazłem z nim niektórych rzeczy.
    A mianowicie:
    Napisałem program, który dodaje 2 liczby całkowite, ale wpisać je trzeba po enterze; chciałbym, żeby liczby były wpisywane po spacji.
    Oto program:
    #!/usr/bin/perl

    use warnings;

    $a = <STDIN>;
    $b = <STDIN>;
    $c = $a + $b;

    print "$c\n";

    exit;

    No i oto, jak działa:
    Input:
    2
    3
    Output:
    5
    A tak chcę, żeby działał:
    Input:
    2 3
    Output:
    5

    Byłbym wdzięczny za pomoc, bo chyba nie jest to trudne (chociaż próbowałem na kilka sposobów), a jest to podstawa.

  2. #2
    Avatar GSG-9
    GSG-9 jest offline Shapeshifter
    Zarejestrowany
    Jul 2007
    Skąd
    C:\Perl\bin
    Postów
    1,578

    Domyślnie

    regexy
    Kod:
    #!/usr/bin/perl -w
    use strict;
    my $wynik;
    chomp (my $a = <STDIN>) ;
    if ($a =~ m/(.{1}).(.{1})/) {  $wynik = $1 + $2; }
    print "wynik to $wynik\n";
    War, war never changes.

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

    Domyślnie

    Ja bym raczej nie robil takiego regexa... bo jest bardzo niedokladny:
    - lapie liczby jednocyfrowe
    - niekoniecznie lapie cyfry... lapie cokolwiek w sumie - litery, itd...
    - odstep moze byc nie spacja ale czymkolwiek

    Moj regex:
    Kod:
    $a =~ /(\d+)\s+(\d+)/;
    taki regex ma wiekszy sens
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  4. #4
    Avatar GSG-9
    GSG-9 jest offline Shapeshifter
    Zarejestrowany
    Jul 2007
    Skąd
    C:\Perl\bin
    Postów
    1,578

    Domyślnie

    wiem zauwazylem to pozniej... wiesz ze regexy ciezko mi przychodza
    War, war never changes.

  5. #5
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Cytat Napisał TQM Zobacz post
    Moj regex:
    Kod:
    $a =~ /(\d+)\s+(\d+)/;
    A mógłbym prosić o wyjaśnienie tego kodu? Bo dla początkującego, to wygląda kosmicznie, że się tak wyrażę. (nawet nie wiem, co to jest regex)

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

    Domyślnie

    W tym dziale na forum prowadzilem kurs podstaw perl'a - regexy tez byly omawiane o ile pamietam... a jesli nie to omowie. Ten kurs to byly calkowite podstawy omawiajace rodzaje zmiennych, podstawowe bloki logiczne itd.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Udało mi się (z waszą pomocą - dziękuję!).
    Oto kod, gdyby ktoś też miał taki problem:

    #!/usr/bin/perl
    use strict;
    my $tekst = <STDIN>;
    my $x;
    $tekst =~ /(\d+)\s+(\d+)$/;
    $x = $1 + $2;
    print "$x\n";

    Zastanawiam się jednak, jakby zrobić, żeby program dodawał liczby rzeczywiste.
    Bo \d - to liczba, ale całkowita i nie da się wstawić liczby rzeczywistej.

    Oto program, który dodaje 2 liczby o zaokrąla je do 2 cyfry po przecinku (jednak ten program niestety nie działa, bo wyświetla zawsze: 0.00):
    #!/usr/bin/perl
    use strict;
    my $tekst = <STDIN>;
    my $x;
    $tekst =~ /(\d+)\s+(\d+)$/;
    $x = $1 + $2;
    $x=sprintf "%.2f",$x;
    print "$x\n";

    Wie ktoś może, jak zrobić by uznawał też liczby rzeczywiste?
    Ostatnio edytowane przez kokosoko : 02-28-2009 - 21:28

  8. #8
    Zarejestrowany
    Jan 2009
    Postów
    8

    Domyślnie

    Kod:
    #!/usr/bin/perl
    use strict;
    my $tekst = <STDIN>;
    my $x;
    $tekst =~ /(.*) (.*)/;
    $x = $1 + $2;
    $x=sprintf "%.2f",$x;
    print "$x\n";

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

    Domyślnie

    hmmmm prawie... regex zlapie np "zupa 123456" i jak to teraz ma dodac i zaokraglic do 2 po przecinku?

    raczej cos w ten sposob:
    Kod:
    $a =~ /(\d+(\.\d+)?)\s+(\d+(\.\d+)?)/;
    a teraz tlumaczac na nasze...
    - jedna lub wiecej cyfr
    - zero lub jeden ciag ".cyfry"
    - to co znalezione zapamietaj w zmiennej
    - jeden lub wiecej znakow bialych (spacja, tabulacja)
    - to samo dopasowaine co na poczatku

    dla upartego mozna jeszcze dodac ^ i $ aby zaznaczyc twardo poczatek i koniec linii ale wtedy regex nie zadziala jesli ktos przypadkiem walnie spacje albo jakas litere na poczatku linii :P

    Na upartego mozna regex zmienic na:
    Kod:
    $a =~ /(\d+(\.\d+)?)\D+(\d+(\.\d+)?)/;
    a wtedy z tekstu "sadk4.53a c2sa" powinien wyciagnac 4.53 i 2 ignorujac reszte Perl power!
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10
    Zarejestrowany
    Jan 2009
    Postów
    8

    Domyślnie

    Byłem zdecydowanie nastawiony na uzycie tylko liczb ;p

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. [Perl] Kurs Perl - cz.1 - wprowadzenie i podstawy
    By TQM in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 22
    Autor: 10-27-2014, 00:50
  2. Odpowiedzi: 18
    Autor: 07-14-2009, 11:55
  3. Dodawanie vhostów do apache bez restartowania
    By suchy in forum Domeny/Serwery
    Odpowiedzi: 4
    Autor: 09-12-2008, 10:18
  4. Odpowiedzi: 31
    Autor: 05-20-2008, 17:01
  5. dodawanie skrótu do menu kontekstowego
    By pierzu in forum Windows
    Odpowiedzi: 0
    Autor: 02-09-2007, 12:38

Tagi

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