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ę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?
Dzięki za odpowiedź 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.
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 x
y 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 ), to treść tej funkcji trzeba zamieścić w głównym schemacie.
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 ), 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:
- 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 - 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:
- Podaj K
- Podaj Z
- Wprowadź K liczb do tablicy
- Jeśli K mniejsze lub równe 3 zakończ program w przeciwnym wypadku kontynuuj
- 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
- 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.
Dziękuje za pomoc i poświęcony czas, z tymi wskazówkami to już nawet młoda powinna sobie poradzić to rozrysować. Pozdrawiam.
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
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ł.
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.