Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Największa liczba wśród 8 liczb wpisanych z klawiatury

JTurn 15 Lut 2012 16:20 3578 15
  • #1 15 Lut 2012 16:20
    JTurn
    Poziom 7  

    Witam! Jest takie zadanie z języka PASCAL:

    Napisz program, który wczyta 8 liczb wpisanych z klawiatury, następnie wypiszę największą i najmniejszą podaną liczbę i je doda. (Trzeba użyć pętli while)

    Nie chce gotowca bo jest mi to nie potrzebne, wole żebyście napisali jak ten program napisać, ale jak już ktoś chce może go napisać :).

    0 15
  • #3 15 Lut 2012 21:17
    Defice
    Poziom 25  

    Implementacji prostych algorytmów w pascalu jest sporo. Poszukaj sortowania, metoda zależy od Ciebie. Wpisz w google choćby "sortowanie bąbelkowe" a znajdziesz algorytmy lub nawet gotowe kody, nie ma filozofii przekształcić je na własne potrzeby wg. sugestii arnoldziq

    0
  • #4 16 Lut 2012 10:04
    arnoldziq
    Moderator Programowanie

    Defice napisał:
    Poszukaj sortowania, metoda zależy od Ciebie.

    Chyba nie doradza kolega, zastosowania sortowania, aby wyłonić najmniejszą i największą liczbę ze zbioru 8 liczb ???

    0
  • #5 16 Lut 2012 10:14
    Defice
    Poziom 25  

    Używając słowa sortowanie nie miałem konkretnie na myśli sortowania samego w sobie (raczej użycie zmiennej max lub min i klasyczne porównywanie jej z kolejnymi zmiennymi). Ale z drugiej strony dlaczego nie ? Można przecież uruchomić algorytm sortujący a później operować już na posortowanym zestawie liczb, gdzie w zależności od implementacji na pierwszym miejscu tablicy będzie znajdował się element minimalny, a na ostatnim maksymalny lub odwrotnie

    0
  • #6 16 Lut 2012 10:33
    Xitami
    Poziom 29  

    Code:
    ZMIENNE max, min, a, i 
    
       CZYTAJ max
       CZYTAJ min
       JEŻELI min > max
          ZAMIEN( min, max )
       i = 2
       DOPÓKI i < 9
          CZYTAJ a
          i = i + 1
          JEŻELI a  >max
             max = a
          JEŻELI a < min
             min = a
       PISZ( max, min, max+min )

    1
  • #7 16 Lut 2012 10:44
    arnoldziq
    Moderator Programowanie

    Defice napisał:
    Ale z drugiej strony dlaczego nie ?

    Bo to jest bez sensu. Strata zasobów, czasu i miejsca. całą operację można wykonać w pętli pobierającej dane z klawiatury... Sortownie czegokolwiek jest zupełnie bez sensu.
    Możemy przeprowadzić test...
    Ja napiszę, na szybko, taki program, bez sortowania, a kolega z sortowaniem i zobaczymy który program będzie szybszy i sprawniejszy oraz który będzie zajmował mniej miejsca.
    Powiem od razu, że cały program, w moim przypadku zajmie 14 linii kodu. Wraz ze słowem program na początku.

    0
  • #8 16 Lut 2012 11:59
    Defice
    Poziom 25  

    No zgadzam się, chociaż te 14 linii brzmi jak wyzwanie :D Aż prosi się wsadzić po kilka instrukcji do jednej linii, ale bez sensu. Wracając do wydajności kodu, pewnie na tym poziomie jest to nieistotne. Jednak biorąc pod uwagę to, że program może być jakoś modyfikowany to nie byłbym zwolennikiem porównań (które są kosztowne) dla znacznie większego zestawu liczb (bo przecież jeśli rozmawiamy już o wydajności kodu to trzeba pod uwagę wziąć większe n) sortowanie może okazać się wydajniejszą metodą (tak przynajmniej uczą na studiach).

    0
  • #9 16 Lut 2012 12:06
    ed-ek
    Poziom 34  

    Program ma więcej niż 14 linii, ale formatując go inaczej może mieć <14.

    Kod: pascal
    Zaloguj się, aby zobaczyć kod
    [/code]

    0
  • #10 16 Lut 2012 12:25
    arnoldziq
    Moderator Programowanie

    Kod: pascal
    Zaloguj się, aby zobaczyć kod


    Dodano po 9 [minuty]:

    Defice napisał:
    No zgadzam się, chociaż te 14 linii brzmi jak wyzwanie :D Aż prosi się wsadzić po kilka instrukcji do jednej linii, ale bez sensu. Wracając do wydajności kodu, pewnie na tym poziomie jest to nieistotne. Jednak biorąc pod uwagę to, że program może być jakoś modyfikowany to nie byłbym zwolennikiem porównań (które są kosztowne) dla znacznie większego zestawu liczb (bo przecież jeśli rozmawiamy już o wydajności kodu to trzeba pod uwagę wziąć większe n) sortowanie może okazać się wydajniejszą metodą (tak przynajmniej uczą na studiach).

    Ale przy tym konkretnym zadaniu, którym jest wyznaczenie największej i najmniejszej liczby, ilość podanych z klawiatury cyfr, nie ma żadnego znaczenia.
    Tworzenie tablic, które zapiszą te cyfry, aby je posortować, to marnotrawstwo kodu, czasu i pamięci. W zadaniu nic nie ma na temat przechowania, czy wyświetlenia wszystkich liczb. Jedyne dwie liczby, które nas interesują za to największa i najmniejsza liczba. Gdzie tu miejsce na jakiekolwiek sortowanie ???

    0
  • #11 16 Lut 2012 13:46
    gaskoin
    Poziom 38  

    Do Twojego programu dodałbym jeszcze, że przy liczniku = 1 największa też się równa wpisanej liczbie. Ponieważ jak wpiszesz 8 tych samych liczb to najmniejszą i największą będzie ta sama liczba, a nie ta liczba i 0 :)

    0
  • #12 16 Lut 2012 13:49
    arnoldziq
    Moderator Programowanie

    :)
    Uwaga słuszna, ale nie do końca :)
    Program działa wyśmienicie, w formie oryginalnej, dla wszystkich liczba naturalnych (max 2 bajty), dodatnich.

    0
  • #13 17 Lut 2012 09:45
    ed-ek
    Poziom 34  

    Wpisanie takiej samej liczby obrazuje fcję ciągłą f(x)=liczba. Ma ona max=min. Jednak ograniczenie się tylko do liczb naturalnych jest wg mnie błędem. Zmienną liczba właściwie powinno się zadeklarować jako real, bo treść zadania nie narzuca ograniczeń.

    0
  • #14 17 Lut 2012 10:34
    Defice
    Poziom 25  

    Biorąc pod uwagę "złożoność" zadania, nie chodzi tu o liczby rzeczywiste, program raczej dla osoby początkującej

    0
  • #15 17 Lut 2012 11:07
    ed-ek
    Poziom 34  

    Mój post właściwie miał na celu zwrócenie uwagi na fakt, że w programie podanym przez arnoldziq nie można wpisywać wszystkich liczb ujemnych, max zawsze będzie =0. Albo zmienić imstrukcję na:
    write(' podaj ',licznik,' liczbe >=0: '); readln(liczba);
    ale lepiej zmienić kod i usunąć to ograniczenie.

    0
  • #16 17 Lut 2012 11:13
    arnoldziq
    Moderator Programowanie

    ed-ek napisał:
    Mój post właściwie miał na celu zwrócenie uwagi na fakt, że w programie podanym przez arnoldziq nie można wpisywać wszystkich liczb ujemnych, max zawsze będzie =0.

    Całkowicie się zgadzam. Mój błąd.
    Wystarczy
    Kod: pascal
    Zaloguj się, aby zobaczyć kod
    zmienić na :
    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0