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.

Turbo pascal - Jak ugryźć początek programu tablica z funkcja randomize?

Marcin2992 18 Cze 2013 09:17 2508 16
  • #1 18 Cze 2013 09:17
    Marcin2992
    Poziom 6  

    Witam

    Mam napisać program który będzie spisywał do tablicy losowo wybranych dwadzieścia liczb z przedziału od 20 do 59 a następnie wybierze z tej tablicy wartość największą i najmniejszą.

    Mój problem polega głównie na napisaniu kodu który by spisywał do tablicy 20 liczb w dowolnie wybranego przedziału?

    Mam użyć pętle for a w niej funkcje randomize?
    Proszę o pomoc.


    Miłego dnia.

    0 16
  • #2 18 Cze 2013 10:23
    arnoldziq
    Moderator Programowanie

    Marcin2992 napisał:
    Mam użyć pętle for a w niej funkcje randomize?
    Proszę o pomoc.

    Randomize rozpoczyna sam proces "losowości", w pętli FOR musisz zastosować raczej Random.

    0
  • #3 19 Cze 2013 08:03
    Marcin2992
    Poziom 6  

    Mógłbyś podać kod tej "funkcji losującej" jak to powinno wyglądać??
    bo nie mam pojęcia jak to napisać.

    0
  • Pomocny post
    #4 19 Cze 2013 10:08
    arnoldziq
    Moderator Programowanie

    Proszę bardzo :

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 19 Cze 2013 10:43
    Dżyszla
    Poziom 42  

    W Pascalu funkcja Random(x) losuje liczby całkowite z przedziału [0..x-1] (0 <= Random(x) < x). Stąd trzeba szerokość zakresu wynikającego z ograniczeń zwiększyć o 1.

    Edycja: Sorry wytknąłem Arnoldziqowi błąd, a on jednak to zapisał tylko w innym miejscu ;)

    @Marcin2992 Praktycznie przykłady znajdziesz m.in. we wszystkich kompilatorach Borlanda (CodeGear/Embarcadero) po napisaniu nazwy funkcji i naciśnięciu F1 lub Ctrl+F1.

    0
  • Pomocny post
    #6 19 Cze 2013 11:57
    arnoldziq
    Moderator Programowanie

    Dżyszla napisał:
    W Pascalu funkcja Random(x) losuje liczby całkowite z przedziału [0..x-1] (0 <= Random(x) < x). Stąd trzeba szerokość zakresu wynikającego z ograniczeń zwiększyć o 1.

    Zepsułeś całą niespodziankę :)

    0
  • #8 20 Cze 2013 16:56
    Marcin2992
    Poziom 6  

    Dzięki za pierwszą część programu trochę ją przerobiłem bo chodziło mi bardziej o coś takiego

    Kod: pascal
    Zaloguj się, aby zobaczyć kod


    a jak teraz wstawić wybieranie najmniejszej i największej wartości?
    czy można przypisać tablice do pewnej zmiennej?
    bo chciałem tak zrobić ale wychodzą mi same bzdury w kodzie a program się kompiluje ale nie działa
    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • #9 20 Cze 2013 18:10
    Dżyszla
    Poziom 42  

    Bo wykorzystujesz zmienną i poza pętlą. To pierwszy błąd. A drugi to ta pętla while - co ona niby ma robić? Jak ma działać, skoro w pętli nie zmieniasz w żaden sposób zmiennych wpływających na warunek jej wykonania?

    Wyszukiwanie wartości min i max to ustawienie tychże na pierwszy element tablicy, a później - analizując w pętli kolejne elementy tablicy - ewentualna ich aktualizacja.

    0
  • #10 21 Cze 2013 05:35
    Marcin2992
    Poziom 6  

    A mógłby ktoś napisać jak ten program powinien wyglądać w całości poprawnie?

    0
  • #12 21 Cze 2013 20:58
    franz87
    Poziom 16  

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • #13 22 Cze 2013 06:18
    Marcin2992
    Poziom 6  

    Nie chodziło mi o taki program ale bardziej o taki:

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

    0
  • #14 22 Cze 2013 12:55
    franz87
    Poziom 16  

    Marcin2992 napisał:
    Nie chodziło mi o taki program ale bardziej o taki:

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


    W drugiej pętli for nie masz begina i enda, więc jedynie co ta pętla ci zrobi to wyświetli 20 razy writeln;

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    co ta pętla robi?
    Równie dobrze mógłbyś tu zapisać max:=tab[20]; min:=tab[20];

    Program wymaga dwóch pętli:
    1 - losuje liczby z przedziału, i zapisuje je do 20 elementowej tablicy
    2 - za pomocą IF wyszukuje min lub max.

    Program na 19 linii:

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    0
  • #15 23 Cze 2013 06:53
    Marcin2992
    Poziom 6  

    Może i ten program jest " nie profesjonalnie napisany" ale mi chodzi bez zarzutu więc nie rozumiem po co te uwagi...

    Odpalając go w kompilatorze lazarus wyświetla mi dwadzieścia liczb z określonego przedziału a potem wartość min i max.

    Jedyny problem to taki że przed wyświetleniem 20 liczb na początku wstawia zeru.

    Jeśli nie sprawdziłeś tego programu to po co mówisz że wyświetla 20 razy "write"

    0
  • #16 23 Cze 2013 16:31
    franz87
    Poziom 16  

    Marcin2992 napisał:
    Może i ten program jest " nie profesjonalnie napisany" ale mi chodzi bez zarzutu więc nie rozumiem po co te uwagi...

    Ktoś chce ci pomóc to jeszcze masz pretensje.
    Pod nickiem napisałeś sobie "Marzyciel o programowaniu". Jeżeli masz takie podejście do oferowanych uwag, to tylko przy tym marzycielu zostaniesz.

    Marcin2992 napisał:

    Jedyny problem to taki że przed wyświetleniem 20 liczb na początku wstawia zeru.

    Ostatnia pętla for ma być inkrementowana od 1 a nie 0

    Marcin2992 napisał:

    Jeśli nie sprawdziłeś tego programu to po co mówisz że wyświetla 20 razy "write"


    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    Ta pętla 20 razy nie wyświetli jak to napisałeś, ale wykona polecenie nowej linii. Nie mam pojęcia po co ją stworzyleś, tak samo jak:

    Kod: pascal
    Zaloguj się, aby zobaczyć kod

    po wywaleniu tej pętli program działa bez zmian bo jest ona bezsensowna

    0
  • #17 23 Cze 2013 17:05
    Marcin2992
    Poziom 6  

    Może masz racje że pętla jest bez sensowna ale jak dla mnie program miał wyświetlać 20 liczb z określonego przedziału i wybierać max i min i to też robi więc uważam że dobrze wykonałem zadanie.

    A wstawiłem te dwie pętle bo uważałem że są potrzebne jak zauważyłeś ja się uczę a nie programuje i nie znam się na tym tak dobrze jak TY...

    I masz racje pierwsze zdanie zabrzmiało trochę jak pretensje ale nie to miałem na myśli...

    0