Banalny program pascal :/ do poprawienia

program ma wczytywać liczby z tablicy(nie od użytkownika, nie wiem jak to się nazywa…) i wypisać liczby podzielne przez 4 i 7. Umiałem takie coś, 2 tygodnie przerwy i znów pustka w głowie… Takiego banalnego programu nie zrobiłem na sprawdzianie… Proszę o pomoc, nie mam już do tego sił.

program obliczamy;

uses crt;

var

a:array[1..100] of integer;

oblc:integer;

{program oblicza liczby podzielne przez 4 i 7 czyli przez 28}

begin

writeln ('program obliczy liczby podzielne przez 4 i 7 i wypisze je');

begin

for oblc:=1 to 100 do

writeln (a[oblc]) ;

begin

if a[oblc] mod 28=1 then

writeln (a[oblc]);


end;

end;

readln;

end.
  1. Kiedy mówimy, że jakaś liczba jest podzielna przez inną? Wtedy kiedy reszta z dzielenia jest równa 0, a nie 1.

  2. Poza tym w programie deklarujesz tablicę 100 elementów, ale nigdzie jej nie inicjalizujesz. Możesz to zrobić np. tak, że w pierwszej pętli korzystając z funkcji random inicjalizujesz każdy element tablicy i jednocześnie wyświetlasz ten element. Następnie w drugiej pętli sprawdzasz dla każdej z tych liczb z tablicy, czy jest podzielna przez 28. Jeśli jest to wyświetlasz ten element.

  3. Musisz poczytać też kiedy należy używać begin end;, bo używasz to w zły sposób. Odsyłam to tutoriala: http://turbopascal.skryptoteka.pl/1.html.

mogę cie prosić żebyś pokazał mi to na kodzie?..

program obliczenia;

uses crt;

var

 liczby:array[1..10] of integer;

 i:integer;


begin

 clrscr;

 randomize;


 writeln('Program wyznacza liczby podzielne przez 4 i 7 z nastepujacych:');

 for i:=1 to 10 do

 begin

  liczby[i]:=random(99)+1; {losowa liczba z przedzialu 1 do 100}

  write(liczby[i], ' ');

 end;


 writeln; writeln('Liczby podzielne:');

 for i:=1 to 10 do

  if liczby[i] mod 28 = 0 then write(liczby[i], ' ');

end.

Czyli wychodzi z tego że ze 100 tylko liczba 28, 56 jest podzielna przez 7 i 4? W końcu coś zaczyna mnie ciekawić :slight_smile: A jeszcze jedno, jak załatwić powtarzalność wylosowanych liczb? Dziękuje. Dobrze że są ludzie tacy jak Ty. :slight_smile:

A na podstawie czego wyciągasz takie wnioski? 28 i wielokrotności 28, czyli 56 oraz 84 także. BTW do kodu dodałem dwie linijki clrscr; oraz randomize;. Na samym końcu programu możesz sobie dodać jeszcze linijkę readkey (choć nie jest potrzebna).

A jeszcze jedno, jak załatwić powtarzalność wylosowanych liczb?

program obliczenia;

uses crt;

var

liczby:array[1..10] of integer;

i,j,liczba:integer;

istnieje:boolean;


begin

clrscr;

randomize;


writeln('Program wyznacza liczby podzielne przez 4 i 7 z nastepujacych:');

for i:=1 to 10 do

begin

  repeat

   istnieje:=false;

   liczba:=random(99)+1; {losowa liczba z przedzialu 1 do 100}


   for j:=1 to i-1 do

    if liczba = liczby[j] then

    begin

     istnieje:=true;

     break;

    end;

  until istnieje = false;


  liczby[i]:=liczba;

  write(liczby[i], ' ');

end;


writeln; writeln('Liczby podzielne:');

for i:=1 to 10 do

  if liczby[i] mod 28 = 0 then write(liczby[i], ' ');


writeln; readkey;

end.

Więcej się nauczysz próbując zrobić coś samemu. Gotowce Ci nic nie dadzą.

Co mam zrobić jak mnie to nie interesuje w ogóle… Chcę tylko zaliczyć ten przedmiot, Całkowicie mnie to nie pociąga. Żadnego zaciekawienia, nic nie wiem co ze mną…

Rozumiem. Cóż, niektórych nie interesuje np. matematyka, ale nie da się jej zaliczyć, jeśli nie zrozumie się jej chociaż w jakimś stopniu.

A czy da się jakoś zrobić żeby te liczby były wczytywane i sprawdzane po kolei? zamiast losowania?

EDIT:

Udało się chyba :smiley: Proszę o sprawdzenie

program liczy;

uses crt;

var

a:array[1..100] of integer;

i:integer;

begin

clrscr;

writeln ('program wczyta tablice, pozniej sprawdzi ktore liczby sa podzielne przez 28');

for i:=1 to 100 do

begin

a[i]:=i;

end;

for i:=1 to 100 do

begin

writeln (a[i]);

end;

writeln ('Teraz podam liczby podzielne przez 28'); 

for i:=1 to 100 do

begin

if a[i] mod 28 = 0 then

writeln (a[i])


end;

readkey;

end.

Dodane 22.05.2011 (N) 12:47

Przeszedłem do trudniejszych zadań. Mam taki problem. Piszę program, który wczytuje tablicę dwuwymiarową (nie podaje użytkownik) to jest tablica 1…100 i teraz tak. W jednowymiarowej wystarczyło zrobić np:

for k:=1 to y do

a[y]:=y;

i przypisało w komórce 1 numer 1 a w dwuwymiarowej? jak to zrobić?

for i:=1 to x do

for k:=1 to y do

a_:=i_

a[k]:=k??? tak nie działa… : P

Program napisałeś poprawnie. Wprowadziłem tylko drobne poprawki odnośnie sposobu wyświetlania wyniku:

program liczy;

uses crt;

var

a:array[1..100] of integer;

i:integer;

begin

clrscr;

writeln ('program wczyta tablice, pozniej sprawdzi ktore liczby sa podzielne przez 28');

for i:=1 to 100 do

begin

 a[i]:=i;

 write(a[i],' ');

end;

writeln;


writeln ('Teraz podam liczby podzielne przez 28');

for i:=1 to 100 do

 if a[i] mod 28 = 0 then write(a[i],' ');

writeln;


readkey;

end.

Mogłeś go też napisać w sposób zaprezentowany poniżej. Program ten wczytuje z klawiatury liczbę podaną przez użytkownika i wyświetla, czy jest ona podzielna przez 28, czy też nie. Program zakończy działanie, gdy użytkownik nie poda liczby, a jakiś przypadkowy ciąg znaków.

program Obliczenia;

uses crt;

var

 dane: string;

 liczba, kodBledu: integer;


begin

 writeln('Program sprawdza, czy podana liczba jest podzielna przez 4 i 7.');

 repeat

  write('Podaj liczbe: ');

  readln(dane);

  Val(dane, liczba, kodBledu);

  if kodBledu = 0 then

  begin

   if liczba mod 28 = 0 then writeln('Podzielna.')

   else writeln('Niepodzielna.');

  end;

 until kodBledu <> 0;

end.

Jeśli chodzi o tablice to obejrzyj poniższy kod.

program Tablice;

uses crt;

var

 jednowymiarowa: array[1..10] of integer; {tablica 1x10}

 dwuwymiarowa: array[1..10] of array[1..10] of integer; {tablica 10x10}

 i,j: integer;


begin

 writeln('Tablica jednowymiarowa:');

 for i:=1 to 10 do

 begin

  jednowymiarowa[i]:=i;

  write(jednowymiarowa[i], ' ');

 end;

 writeln;


 writeln('Tablica dwuwymiarowa:');

 for i:=1 to 10 do

  for j:=1 to 10 do

  begin

   dwuwymiarowa[i,j]:=j+(i-1)*10;

   write(dwuwymiarowa[i,j], ' ');

  end;

 writeln;


 readkey;

end.

BTW Zmień tytuł topica na [Pascal] Liczby podzielne przez 4 i 7. Poza tym obejrzyj ten tutorial: http://www.wcss.wroc.pl/~wach/intro/__intro.html. Jest chyba nawet lepszy niż ten do którego wcześniej podałem link.