Forum PCLab.pl: Pascal - zaliczenie - Forum PCLab.pl

Skocz do zawartości

Uwaga! Uwaga! Lubisz gry w klimatach fantasy? Zmierz się z tysiącami graczy, zagraj za darmo w grę Fragoria!

Otwarty

Ikona Ostatnio dodane tematy

Ikona Najnowsze pliki

  • (2 Stron)
  • +
  • 1
  • 2
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

Pascal - zaliczenie Oceń temat: -----

#1 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 14:27

Witam

Mam do napisania program, właściwie to będzie to kilka mniejszych programów na zaliczenie, z racji sytuacji materialnej musiałem iść do pracy co skutkuje tym iż przestałem chodzić na niektóre zajęcia i teraz mam zaległości, ale do rzeczy.

Oto co muszę zrobić, na ta chwile posiadam zadeklarowana tablice z liczbami od 1 do 100 wyświetlanymi kolejno (1,2,3,4,5,6,7...) w linii poziomej nie pionowej.
Niestety z resztą ciężko sobie poradzić czytam po forach od co najmniej 1godziny jak nie 2 ale nigdzie nie ma instrukcji z tablicami. Będę bardzo wdzięczny za pomoc. Środowisko oczywiście Dev Pascal.


- wypisywanie wektora liczb (100) i wybieranie z nich tych, ktore byly w przedziale 30-70
- wypisywanie wektora liczb (100) i wybieranie z nich tych, ktore byly w przedziale 30-70, a reszte (30> i 70<) byla zapisana jako zera, na koncu tego wektora
- wypisywanie wektora liczb i sumowanie ich za pomoca petli for
- wypisywanie wektora liczb i sumowanie ich za pomoca petli while
- wypisywanie wektora liczb i sumowanie ich za pomoca petli do..while
- wypisywanie wektora liczb i wyszukanie najwiekszej/najmniejszej wartosci
- wypisywanie wektora liczb w taki sposob, aby zadna z nich sie nie powtorzyla


Dziękuję i pozdrawiam

#2 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 16:48

jakbys mial chociaz jeden przykladowy output to moze i bym cos napisal bo w sumie mi sie nudzi

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 16:52


#3 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 17:41

program Untitled;
USES CRT;

var
i: byte;
a: array[1..100] of byte;
max,min:integer;
begin
min:=30;
max:=70;
for i:=0 to 99 do
begin
a[i]:=i+1;
if (a[i] > min) and (a[i] < max) then write(a[i], ' ');



end;
readln;
end.

END.

To jest program który wyrzuca liczby z przedziału 30< a >70

A to ten który ma wyrzucać reszte liczb jako 0

program Untitled;
USES CRT;

var
i: byte;
a: array[1..100] of byte;
max,min:integer;
max1,min1:integer;
begin
min:=30;
max:=70;
for i:=0 to 99 do
begin
a[i]:=i+1;
if (a[i] > min) and (a[i] < max) then write(a[i], ' ');
if (a[i] < min) then write('0 ');
if (a[i] > max) then write('0 ');


end;
readln;
end.

END.



Mam jeszcze pytanie co należy zrobić aby liczby były wyrzucane na ekranie pionowo po kolei a nie poziomo

Ten post był edytowany przez Spoko91 dnia: 09 Luty 2012 - 18:04


#4 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 19:07

wystarczy dac writeln zamiast write, wtedy po kazdym wypisaniu bedziesz mial nowa linie, drugi program bym poprawil, zamiast 3 if'ow jeden po drugim, dalbym else'y. Wtedy nie zawsze te 3 instrukcje beda sprawdzane, a to juz jakas oszczednosc, poza tym max1 i min1 sa nieuzywane wiec po prostu je skasuj ;p jezeli sam napisales te programy i teraz masz informacje dot. writeln zamiast write to powinienes poradzic sobie z reszta

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 19:17


#5 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:07

Tamte rzeczy już poprawiłem oprócz else, ale siedzie w miejscu z sumowanie liczb za pomocą for napisałem tak


s:=s + a[i];
writeln('Suma liczb wynosi', s);

ale wyrzuca mi 0 :/

#6 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:12

daj caly kod ;p

#7 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:14

program Untitled;
USES CRT;

var
i: byte;
a: array[1..100] of byte;
s:integer;
begin
a[i]:=i+1;
write(a[i],' ');
begin
for i:=0 to 99 do
s:= i + a[i];
writeln('Suma liczb wynosi = ', s);
end;
readln;
end.

END.

To ma być już osobny program więc kombinuje coś na nowym, chciałbym żeby wyrzucał wszystkie liczby i pod nimi podawał ile wynosi suma

Potem zrobić to samo za pomocą pętli while i do...while ><

Ten post był edytowany przez Spoko91 dnia: 09 Luty 2012 - 20:15


#8 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:17

po pierwsze masz tablice numerowana od 1 do 100 a w forze dajesz od 0 do 99 - do poprawy, na wypisywanie na poczatku tez potrzebny jest for, a no i nie inicjalizujesz s'a na poczatku, dodaj przed petla s:=0; nie wiem czemu tez widze dwa beginy ;p po tym write chyba jest inepotrzebny, no i nie s:=i+a[i] tylko s:=s+a[i].
A tak w ogole to widze sporo bledow, zaraz ogarne ;p w pierwszym forze jeszcze powinno byc chyba a[i]:=i; Dobra ogarniete, powinno wygladac tak:
program Untitled;

var
i: byte;
a: array[1..100] of byte;
s:integer;
begin
for i:=1 to 100 do begin
    a[i]:=i;
    writeln(a[i],' ');
end;

s:=0;
for i:=1 to 100 do
    s:= s + a[i];
writeln('Suma liczb wynosi = ', s);
readln;
end.

a wczesniej masz opis chyba wszystkeigo co poprawilem

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 20:28


#9 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:28

Suma liczb wynosi 0 a pod wyskakuje 101

#10 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:29

Zobacz postSpoko91, o 09 Luty 2012 - 20:28, napisał(a):

Suma liczb wynosi 0 a pod wyskakuje 101

w tym kodzie co ja dalem? czy po jakichs Twoich poprawkach? :P jesli po Twoich to napisz co zrobiles

#11 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:32

Poprawiłem po swojemu :P bo nie zauważyłem że podałeś kod, w każdym bądź razie widzę co zrobiłem źle przede wszystkim miałem

a[i]:=i+1; a u Ciebie jest bez dodawania wartości 1,

i jeszcze jedno pytanie nie rozumiem jednego zabiegu

for i:=1 to 100 do begin <--- chodzi o ten begin on ma tak być? :D

#12 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:34

jak chcesz w forze wykonywac nie jedna instrukcje a kilka to musisz dac begin i po wszystkich instrukcjach end; A jak widzisz w forze mamy dwie instrukcje, btw najgorszym bledem bylo:
for i:=0 to 99 do
s:= i + a[i];


bo nie robiles tutaj tak na prawde tego co chciales, zamiast do aktualnej sumy dodawac kolejna nastepna liczbe, po prostu dodawales do aktualnego indeksu i wartosc tablicy pod tym indeksem, czyli wiadomo, ze wynikiem s byla wartosc 99 (bo i konczylo sie na 99) + wartosc tablicy pod tym indeksem

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 20:38


#13 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:37

Ok, i teraz while a potem do while, właśnie rozglądam się po necie ale nie widzę jakieś wzorcowej instrukcji z sumowanie liczb przy pomocy pętli while, teraz mam pytanie mam napisać warunek że ma dodawać te wartości póki suma nie będzie równa 5050 (tyle wyszła suma tych liczb) i wtedy wyświetlić czy to raczej pod while repeat podchodzi? Nie ogarniam tego while :P

#14 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:40

raczej w zadaniu nie chodzi o to :P powinienes znow w warunku skorzystac z indeksu i, a mianowicie: najpierw przed petla inicjalizujesz i na 1, potem w warunku petli dajesz i<=100, zas w bloku instrukcji w petli musisz wykonac sumowanie, wypisywanie i zawiekszanie indeksu, nie zapomnij o inicjalizacji s na 0 przed petla

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 20:43


#15 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:43

Dobra chciałem sam to zrobić ale się pogubiłem :P

Dodałem dodawanie +1 do indeksu w pętli nie wiem czy dobrze, w warunku mam dać a[i]:=i+1, przed for napisać i:=1, i napisać i<=100 ale to wszystko w tym 1 for? xD

Cytuj

program Untitled;

var
i: byte;
a: array[1..100] of byte;
s:integer;
begin
i:=1;
for i:=1 to 100 do begin
a[i]:=i+1;
i<=100
writeln(a[i],' ');

s:=0;
for i:=1 to 100 do
s:= s + a[i];
i:=i+1;
writeln('Suma liczb wynosi = ', s);
readln;
end.


Poprawiłem coś takiego ma wyjść?

Ten post był edytowany przez Spoko91 dnia: 09 Luty 2012 - 20:48


#16 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:44

ok a co natworzyles do tej pory? ;p btw to koniecznie musi byc z tablica? Bo do wypisania i zsumowania szczerze mowiac nie widze sensu w tablicy w szczegolnosci gdy jej wartosci odpowiadaja indeksom

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 20:44


#17 Użytkownik jest niedostępny   misiutychy Ikona

  • Real Madryt Fan
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 804
  • Dołączył: Pn, 25 Kwi 05

Napisany 09 Luty 2012 - 20:46

Te zadania także nie mają sensu:
- wypisywanie wektora liczb i wyszukanie najwiekszej/najmniejszej wartosci
- wypisywanie wektora liczb w taki sposob, aby zadna z nich sie nie powtorzyla

#18 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:49

Zobacz postSpoko91, o 09 Luty 2012 - 20:43, napisał(a):

Dobra chciałem sam to zrobić ale się pogubiłem :P

Dodałem dodawanie +1 do indeksu w pętli nie wiem czy dobrze, w warunku mam dać a[i]:=i+1, przed for napisać i:=1, i napisać i<=100 ale to wszystko w tym 1 for? xD



Poprawiłem coś takiego ma wyjść?

to nie bardzo ma sens :P bo zostawiles petle for a mial byc chyba while ;> w forze nie trzeba martwic sie o zwiekszanie indeksu bo po prostu to robi sie samo, poza tym wszystko mozna zrobic jedna petla, przypomne moze konstrukcje while'a ;>
 
while warunek do
  begin
    instrukcja1
    .
    .
    instrukcjan
  end;

i teraz petla ma sie przerwac gdy i dojdzie do 100, zas w petli musisz zainicjalizowac wartosc tablicy, wypisac ja i dodac do sumy

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 20:53


#19 Użytkownik jest niedostępny   Spoko91 Ikona

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 11
  • Dołączył: Cz, 09 Lut 12

Napisany 09 Luty 2012 - 20:51

Nie mam pojęcia ale z tego co mi mówili to liczby maja już być wyświetlone więc albo zrobię to z tablicą albo ręcznie będę musiał przypisać je jedna po drugiej, też się z tym zgadzam chyba że będzie chciał aby liczby były losowane, wtedy wystarczy przed beginem wpisać randomize tak?

Wyżej w poprzednim poście napisałem co zmajstrowałem z tymi i<=100 itp. wynik taki sam jak był przy sumowaniu tych liczb nie wiem czy coś się miało zmienić.


Dobra więc co mam zmienić poproszę jak temu zaradzić xD, też się zastanawiałem dlaczego while nie podałem.

Wybaczcie mi ale miałem Pascala jakieś 3 lata temu jak nie 4, do tego z facetką która była mgr Matematyk..., a poza tym nie specjalnie lubiłem Pascala i ogólnie programowanie a wygląda na to że taki kierunek będę miał bo taką grupę budują.

Dobra gubię się powoli

Cytuj

program Untitled;

var
i: byte;
a: array[1..100] of byte;
s:integer;
begin
while i<=100 do;
begin
i:=1;
s:=0;
for i:=1 to 100 do
s:= s + a[i];
i:=i+1;
writeln('Suma liczb wynosi = ', s);
end;
readln;
end.


Mam instrukcje na sumowanie i wypisanie, a co do podania wartości tablicy to mam wypisać a[i]:=i ?

Poddaje się pogubiłem się całkowicie.

Ten post był edytowany przez Spoko91 dnia: 09 Luty 2012 - 21:00


#20 Użytkownik jest niedostępny   rz3pka Ikona

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 1181
  • Dołączył: So, 12 Kwi 08

Napisany 09 Luty 2012 - 20:56

Zobacz postSpoko91, o 09 Luty 2012 - 20:51, napisał(a):

Nie mam pojęcia ale z tego co mi mówili to liczby maja już być wyświetlone więc albo zrobię to z tablicą albo ręcznie będę musiał przypisać je jedna po drugiej, też się z tym zgadzam chyba że będzie chciał aby liczby były losowane, wtedy wystarczy przed beginem wpisać randomize tak?

Wyżej w poprzednim poście napisałem co zmajstrowałem z tymi i<=100 itp. wynik taki sam jak był przy sumowaniu tych liczb nie wiem czy coś się miało zmienić.


Dobra więc co mam zmienić poproszę jak temu zaradzić xD, też się zastanawiałem dlaczego while nie podałem.

Wybaczcie mi ale miałem Pascala jakieś 3 lata temu jak nie 4, do tego z facetką która była mgr Matematyk..., a poza tym nie specjalnie lubiłem Pascala i ogólnie programowanie a wygląda na to że taki kierunek będę miał bo taką grupę budują.

jezeli liczby mialyby byc losowe co w sumie nadawaloby sens tym zadaniom, to nasze przypisywanie a[i]:=i jest bez sensu ;p bo wtedy liczby po prostu maja wartosc indeksu, przydaloby sie sprecyzowac polecenie i napsiac co chcemy teraz zrobic :D bo Twoje rozwiazanie ma for'a a myslalem, ze pracujemy nad while. Co do losowania sam randomize nie wystarczy, trzeba byloby w petli losowac liczbe z jakiegos zakresu i przypisywac ja do tablicy, losowanie wygladaloby tak: random(100), z tym, ze za 100 mozna podac dowolna liczbe, taki przyklad, wtedy losuje liczbe z zakresu 0 do 99 z tego co pamietam.

Jezeli nie chcesz losowych wartosci to by wygladalo tak:
program Untitled;

var

i: byte;
a: array[1..100] of byte;
s:integer;

begin
i:=1; s:=0; //inicjalizujemy indeks z ktorego bedziemy korzystac w petli i s
while i<=100 do
  begin
    a[i]:=i; //przypisujemy do komorki tablicy o indeksie i, wartosc jemu odpowiadajaca
    s:=s+a[i]; //dodajemy do sumy ta wartosc;
    writeln(a[i]); //no i wypisujemy ja	
    i:=i+1; // zwiekszamy indeks
  end;
writeln ('suma wynosi = ', s); //po petli w ktorej przygotowalismy odpowiednia wartosc s, wypisujemy ja
readln;
end.


jednak jesli chcesz losowanie to napisz, bo tak na prawde nie wiem co chcesz osiagnac:p

Ten post był edytowany przez rz3pka dnia: 09 Luty 2012 - 21:11


  • (2 Stron)
  • +
  • 1
  • 2
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

1 Użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych