matematykaszkolna.pl
pseudokod ola: Jak napiscać psedokod dla tego problemu, wiem że to znany problem i już sprawdziałam wszystkie linki. Chodzi oto aby kod zwracał jedna liczbę. jeśli rszta z dzielenia c przez 2 wynosi 0 to c=c/2 w przeciwnym przypadku: c=3*c+1 I tak na starcie mamy np dwie liczby c=5 oraz i=2 (oznacza numer i−tego wyrazu) a zwrócić ma wartość 8 bo i=1 c=3*5+1=16 i=2 c=16/2=8
14 maj 09:14
yht: zastosować instrukcję wyboru if wprowadź liczbę c jeśli liczba c jest parzysta to podziel liczbę c przez 2 i wyświetl wynik na ekranie w przeciwnym przypadku pomnóż liczbę c przez 3 i dodaj 1, następnie otrzymany wynik podziel przez 2 i wyświetl go na ekranie Przykładowa implementacja kodu w Pascalu: program liczby; var c,wynik:integer; begin clrscr; writeln('podaj liczbe c'); readln(c); if c mod 2 = 0 then wynik:=c/2 else begin wynik:=3*c+1; wynik:=wynik/2; end; writeln('zwrocona wartosc wynosi', wynik); readln; end. (nie wiem czy działa, nie mam kompilatora) w razie pytań − pisz
14 maj 09:34
ola: No tak ale mi czodzi o to aby była pokazywana jedna liczba konkretnie i−ta wartość
14 maj 09:41
ola: mamy dwie liczby na starcie c=5 oraz i=2 (oznacza numer i−tego wyrazu) czyli zwaraca 8
14 maj 09:42
yht: jakie wartości może przyjmować i ? i = 1 gdy c jest parzyste i = 2 gdy c jest nieparzyste ? dobrze to rozumiem ?
14 maj 09:48
ola: np dla c=5 , i −oznacza kolejne numery ciagu dla c=5 mamy ciąg 16 8 4 2 1 ,czyli dla dla i=1 mamy 16 i=2 mamy 8 itdp czyli dal pary (5,2) mamy orzymać wynik 8 dla mary (5,4) mamy otrzymac 2
14 maj 09:57
ola: nie zasatanawiamy się o zakresie i oraz c
14 maj 09:57
ola: chodzi o taki prosty sposób bez tablicc tylko zmienne, pętle
14 maj 10:00
yht: psudokod: podaj liczbę całkowitą c podaj liczbę całkowitą i jeśli i>c, wyświetl napis (błąd) w przeciwnym przypadku podnieś liczbę 2 do potęgi (c−1) podnieś liczbę 2 do potęgi (i−1) podziel liczbę 2c−1 przez 2i−1 otrzymany wynik wyświetl na ekranie emotka
14 maj 10:06
yht: *pseudokod
14 maj 10:07
yht: program liczby; var i,c,a,wyniki,wynikc:integer; begin clrscr; writeln('podaj c'); readln(c); writeln('podaj i'); readln(i); if i>c then writeln('Blad') else begin wyniki:=1; wynikc:=1; for a:=1 to c−1 do wynikc:=2*wynikc; for a:=1 to i−1 do wyniki:=2*wyniki; end; writeln('zwrocona liczba to ',wynikc/wyniki); readln; end.
14 maj 10:16
ola: dlaczego zakładasz że i>c, chyba sie sie nie dogadaujemy emotka dla c=6 mamy ciąg 3 10 5 16 8 4 2 1 i= 1 2 3 4 5 6 7 8 wiec np dla (c=6 i =2) mamy 10
14 maj 10:28
ola: nie znam się na pascalu ewntualnie c lub c++
14 maj 10:31
yht: c oznacza liczbę wyrazów ciągu ? wyrazy ciągu sobie sami wymyślamy ?
14 maj 10:32
ola: c= to jest liczba wymyśla emotka Nie wiemy z ilu elementów składa, choć zawsze wiemy że ostatni wyraz zawsze bedzie 1
14 maj 10:36
yht: czemu dla c=6 mamy ciąg 3 10 5 16 8 4 2 1 od czego zależy liczba wyrazów ciągu ? To kluczowe pytanie, bez tego nie da rady zrobić (choćby) pseudokodu
14 maj 10:40
yht: a dobraa, już wiem
14 maj 10:41
ola: c=6 mamy c=6/2 więc c=3 wic teraz c=3 czyli c=3*3+1=10 czyli c=10/2 wiec c=5 c=5 czyli c=3*5+1=16 c=16 wiec c=8/2=4 c=4 wiec c=4/2=2 c=2 wiec c=2/2=1
14 maj 10:43
yht: podaj c wyzeruj i=0 wykonuj poniższą instrukcję jeśli c podzielne przez 2, przypisz liczbie i zwiększonej o 1 wynik działania P:=c/2 w przeciwnym przypadku przypisz liczbie i zwiększonej o 1 wynik działania P:=3*c+1 dopóki c nie osiągnie wartości 1 podaj i dla podanego i wyświetl wynik działania P
14 maj 10:59
ola: Dzieki a mogłbyś to napisać w pascalu emotka bo nie wiem jak zrozumiec to zdanie "przypisz liczbie i o 1 wynik działania"
14 maj 11:06
yht: musi być koniecznie bez tablic ?
14 maj 11:16
ola: tak bez tablic niestety
14 maj 11:24
yht: wpadłem jeszcze na inny pomysł: pseudokod: podaj c podaj i końcowe (w programie nazwałem je ik) wyzeruj i=0 powtarzaj instrukcję jeśli c podzielne przez 2 zwiększaj i o 1 wykonaj działanie c/2 w przeciwnym przypadku zwiększaj i o 1 wykonaj działanie 3*c+1 aż do momentu gdy i osiągnie wartość równą podanemu wcześniej ik zwróć na ekranie wartość c program liczby; uses crt; var c,i,ik:integer; begin clrscr; writeln('podaj c'); readln(c); writeln('podaj i'); readln(ik); i:=0; repeat if c mod 2 = 0 then begin i:=i+1; c:=c/2; end else begin i:=i+1; c:=3*c+1; end; until i=ik; writeln('zwrocona wartosc wynosi ', c); readln; end. Możliwe że są jakieś błędy bo nie mam dostępu do kompilatora, ale idea wg mnie iść mniej więcej w takim kierunku
14 maj 11:35
yht: *idea ma iść mniej więcej w takim kierunku
14 maj 11:36
ola: a nie ma jakiś kompiatorów onlin dla Pascala
14 maj 12:09
Pytający: Masz w C++: https://ideone.com/dnvYhj
14 maj 12:36
Pytający: A Pascala na ideone też da radę skompilować.
14 maj 12:38
yht: jest kompilator ale trzeba zainstalować: https://sourceforge.net/projects/tpascal/?source=typ_redirect
14 maj 12:39
ola: yht ten kompilator wyrzuca bład w tej linijce c:=c/2; Pytający: U ciebie wyświetla wszystkie liczy do danej a miało wyświetlać tylko tę jedną wartość.
14 maj 12:56
yht: zamień var c,i,ik:integer; na var i,ik:integer; c:real;
14 maj 13:13
ola: teraz tu pokazuje bład: if c mod 2 = 0 then
14 maj 13:16
Pytający: Chyba na tyle potrafisz zedytować? emotka https://ideone.com/3zgQaD
14 maj 13:42