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.
Kiedy mówimy, że jakaś liczba jest podzielna przez inną? Wtedy kiedy reszta z dzielenia jest równa 0, a nie 1.
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.
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ć A jeszcze jedno, jak załatwić powtarzalność wylosowanych liczb? Dziękuje. Dobrze że są ludzie tacy jak Ty.
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).
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ą…
A czy da się jakoś zrobić żeby te liczby były wczytywane i sprawdzane po kolei? zamiast losowania?
EDIT:
Udało się chyba 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ć?
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.