Algorytm i tablicowanie danych


(Driv3er) #1

Witam, mam do Was pytanie odnośnie algorytmów, ponieważ znajoma podrzuciła mi zadanie z informatyki swojej córki, niestety przedmiot algorytmy i struktury danych miałem wieki temu, a prowadząca przedmiot zamiast schematami blokowymi lubowała się tematyką sortowania i w tym momencie nie wiem jak ugryźć to zadanie

. Podstawowe oznaczenia, wprowadzanie danych, operacje decyzyjne znam, ale przy tym zadaniu, gdzie doszło stablicowanie, rozkładam bezradnie ręce, to nie moja dziedzina informatyki :x Może ktoś jest w stanie pomóc, bo młoda przeleżała zajęcia w szpitalu i nie ogarnia tego też. Z góry dziękuję :slight_smile:


(Fizyda) #2

Co ma piernik do wiatraka?

Czego konkretnie nie wiesz? Dla mnie jedyna trudność w tym zadaniu to tradycyjnie zrozumieć co autor zadania miał na myśli. Niestety praktycznie nie istnieją dobrze napisane i sformułowane zadania na uczelni. Jedyny problem w większości zadań to właśnie odkrycie o co chodziło prowadzącemu bo nie raz spotkałem się, że napisane jest A, natomiast trzeba było zrobić Ź.

Czyli nie zajmujesz się programowaniem tak? Czy jak?


(Driv3er) #3

Dzięki za odpowiedź :slight_smile: Nie, nie zajmuje się programowaniem, siedzę w kwestiach bezpieczeństwa systemów i sieci oraz administrowaniem aplikacjami w JST. Niestety nie wiem co jej wykładowca miał na myśli, dodatkowo odwołując się do książki której jest sam autorem i którą ciężko dorwać. Ja niestety tego nie potrafię rozrysować, bo już samo hasło stablicowania i wyrażenie matematyczne zabrzmiało jak zaklęcie z czarnej magii. Co innego w moim przypadku schemat blokowy prostego kalkulatora a co innego rozbudowane zadanie. Może ktoś z Was jest w stanie zrozumieć autora zadania i to rozrysować? Sam nie jestem w stanie, dlatego też tutaj wrzucam zapytanie, bo innej opcji nie mam.


(Razi) #4

Studia, a prosi rodziców o pomoc?

Zadanie na poziomie góra pierwszego roku nauki programowania.

Stablicować = stworzyć tablicę wg wzoru: y[i] = f(x[i]). Jak ma wyglądać funkcja f jest opisane bardzo ładnie. Dla jakich xów zapewne było podane na tablicy. Zapewne xy są liczbami rzeczywistymi.

Schemat blokowy można zrobić i od razu sobie przetestować w programie JavaBlock.
(tak, mój program, ale i tak nic z tego nie mam, że ktoś go używa, poza satysfakcją i motywacją do reaktywacji projektu).

Jako że schematy blokowe generalnie nie „obsługują” funkcji (moje tak :stuck_out_tongue: ), to treść tej funkcji trzeba zamieścić w głównym schemacie.


(Fizyda) #5

W takim razie postaram się pomóc w miarę możliwości, aczkolwiek na schemat blokowy nie licz bo mi się nie chce. Jedno to, że nawet nie pamiętam jakie tam dokładnie figury za co odpowiadały, dwa nie mam w czym tego zrobić, a w paincie to 10x więcej roboty, trzecia sprawa zwyczajnie nie chce mi się tego rysować.

Jeśli chodzi o treść zadania to z tego co mi się wydaje autor zrobił dwa zadania w jednym. Pierwsze to strasznie nazwane “tablicowanie” (szczerze mówiąc to musiałem wygooglować czy takie słowo istnieje :smiley: ), kończy się zaraz za wyrażeniem matematycznym.
Drugie zadanie zaczyna się zaraz za wyrażeniem matematycznym i jest pisane inną czcionką - kursywą. Raczej nie ma możliwości by zrobić to “na raz” w jednym schemacie blokowym bo byłby bardzo długi, skomplikowany i nie miałby sensu. Pomijam już logiczny sens czegoś takiego bo na uczelniach logika w zadaniach to ostatnie co można znaleźć.

Według podziału jaki podałem wyżej, pierwsze zadanie jest stosunkowo proste i algorytm powinien działać np. według następujących punktów:

  1. Mamy podaną tablicę X o długości L, ustawiamy zmienną i = 0; (dla każdego elementu tablicy o indeksie i wykonujemy):
    1.1 Jeśli X[i] jest większe bądź równe -1.5 i różne od 4 to wykonujesz te działania na lewo od tego warunku; wynik działania zapisujesz do tablicy X o indeksie i
    1.2 Jeśli X[i] jest równe 4 to jak wyżej; również jak wyżej zapisujesz do tablicy
    1.3 Tak jak poprzednie pkt, tylko warunek jest taki że X mniejsze niż -1.5
  2. Jeśli i mniejsze od L to zwiększ i o 1 (i = i + 1) w przeciwnym wypadku zakończ program

Podobnie dla drugiego zadania:

  1. Podaj K
  2. Podaj Z
  3. Wprowadź K liczb do tablicy
  4. Jeśli K mniejsze lub równe 3 zakończ program w przeciwnym wypadku kontynuuj
  5. Prosta pętla iterująca po tablicy podobnie jak w pierwszym zadaniu, z tą różnicą, że za każdym razem pierwiastkujesz tab[i] jeśli liczba jest mniejsza od Z
  6. Szukasz najmniejszej wartości
    6.1 Znów pętla tyle że:
    6.2 Jeśli jest to pierwszy element (i == 0) zapamiętujesz go w pomocniczej zmiennej w przeciwnym wypadku sprawdzasz czy zapamiętany element jest większy od danego elementu tablicy, jeśli tak zapamiętujesz go

Mniej więcej tak to będzie wyglądało.

Więc pewnie umiesz pisać proste skrypty i powinieneś już sobie poradzić na bazie tego co napisałem.

No i co z tego? Większym wstydem jest udawać, że wszystko jest ok niż prosić o pomoc. Tym bardziej jeśli rodzice mogą znać kogoś kto były w stanie pomóc i wytłumaczyć. Bo kogo ma prosić o pomoc? Iść do firmy robiącej jakiś soft i programistów zaczepiać? Jak znam życie na roku większość z kolegów ma podobne problemy ze zrozumieniem swoich zadań i wątpię by któryś chciał się jeszcze zajmować Jej zadaniem by choćby Jej wytłumaczyć.
Poza tym na pierwszym roku też nie będzie znała wszystkich i niekoniecznie zna ten niewielki procent kolegów którzy coś ogarniają i byliby w stanie jakoś pomóc.


(Driv3er) #6

Dziękuje za pomoc i poświęcony czas, z tymi wskazówkami to już nawet młoda powinna sobie poradzić to rozrysować. Pozdrawiam.


(Johny) #7

trzeba wziąc sobie przedział dla x równego np. od -10 do 10
za każdym razem sprawdzać x
if (x>=-1,5) then y=sqrt((2*x)+3)/(x-4)
if (x=4) then y=sqrt(x-5)
if (x<-1,5) then y=1/(x-4)
tabx[i]=x;
taby[i]=y;
Schematy blokowe też znajdziesz w necie
elipsa - start,stop
prostokąt - blok obliczeniowy
romb - blok warunkowy
trapez - wejście wyjście - wprowadzanie i wyprowadzanie danych


(Razi) #8

Johny, twój kod się wywali przy dzieleniu przez zero.

I nie bierzemy przedziału -10 do 10, tylko konkretne wartości z tablicy, którą prowadzący na zajęciach napisał.


(Fizyda) #9

Wydaje mi się, że jej nie podawał bo nie jest ona w ogóle potrzebna do wykonania zadania. Tych danych nie przepuścisz przez schemat blokowy. Chodzi tylko o założenie, że tablica z wartościami jest podana czyli w naszym schemacie blokowym algorytmu nie musimy uwzględniać wczytywania tej tablicy.