logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

Marcin2992 18 Cze 2013 09:17 3222 16
REKLAMA
  • #1 12428568
    Marcin2992
    Poziom 9  
    Posty: 7
    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.
  • REKLAMA
  • #2 12428733
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    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.
  • #3 12432302
    Marcin2992
    Poziom 9  
    Posty: 7
    Mógłbyś podać kod tej "funkcji losującej" jak to powinno wyglądać??
    bo nie mam pojęcia jak to napisać.
  • Pomocny post
    #4 12432605
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    Proszę bardzo :
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #5 12432687
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 225
    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.
  • REKLAMA
  • Pomocny post
    #6 12432925
    arnoldziq
    VIP Zasłużony dla elektroda
    Posty: 5376
    Pomógł: 789
    Ocena: 299
    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ę :)
  • #8 12438001
    Marcin2992
    Poziom 9  
    Posty: 7
    Dzięki za pierwszą część programu trochę ją przerobiłem bo chodziło mi bardziej o coś takiego
    Kod: text
    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: text
    Zaloguj się, aby zobaczyć kod
  • #9 12438272
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 225
    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.
  • REKLAMA
  • #10 12440023
    Marcin2992
    Poziom 9  
    Posty: 7
    A mógłby ktoś napisać jak ten program powinien wyglądać w całości poprawnie?
  • #11 12440043
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 225
    Algorytmów wraz z implementacją na wyszukiwanie min i max tutaj na forum tylko znajdziesz całą masę. Raczej nikt nie będzie robił za innych pracy domowej...
  • #12 12442512
    franz87
    Poziom 16  
    Posty: 397
    Ocena: 82
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #13 12443345
    Marcin2992
    Poziom 9  
    Posty: 7
    Nie chodziło mi o taki program ale bardziej o taki:

    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/quote]
  • REKLAMA
  • #14 12444116
    franz87
    Poziom 16  
    Posty: 397
    Ocena: 82
    Marcin2992 napisał:
    Nie chodziło mi o taki program ale bardziej o taki:

    Kod: text
    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: text
    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: text
    Zaloguj się, aby zobaczyć kod
  • #15 12446503
    Marcin2992
    Poziom 9  
    Posty: 7
    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"
  • #16 12447907
    franz87
    Poziom 16  
    Posty: 397
    Ocena: 82
    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: text
    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: text
    Zaloguj się, aby zobaczyć kod

    po wywaleniu tej pętli program działa bez zmian bo jest ona bezsensowna
  • #17 12448016
    Marcin2992
    Poziom 9  
    Posty: 7
    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...

Podsumowanie tematu

✨ Użytkownik poszukiwał pomocy w napisaniu programu w Turbo Pascal, który losuje 20 liczb z przedziału 20-59, a następnie identyfikuje największą i najmniejszą wartość w tej tablicy. W odpowiedziach podano, że należy użyć funkcji `randomize` do inicjalizacji generatora liczb losowych oraz `random` do generowania liczb w określonym zakresie. Użytkownik otrzymał przykładowy kod, który ilustrował, jak poprawnie zrealizować losowanie oraz jak znaleźć wartości min i max. Wskazano również na błędy w kodzie, takie jak niewłaściwe użycie pętli oraz przypisania wartości do zmiennych. Ostatecznie, użytkownik zrozumiał, jak poprawnie zaimplementować program, mimo że miał trudności z niektórymi koncepcjami programistycznymi.
Wygenerowane przez model językowy.
REKLAMA