Skocz do zawartości
ageska

[pascal] Tablica

Rekomendowane odpowiedzi

Mam do zrobienia zadanko, w ktorego treści występuje "Liczby tablicy łączymy w pary: pierwszą z ostatnią, drugą z przedostatnią, itd. Każdą taką parę sumujemy i sprawdzamy, czy otrzymana suma jest liczbą pierwszą." Mam problem z tym, ze nie wiem jak oznaczyć tę ostatią liczbę. Możę ktoś mi pomóc??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

suma w petli

suma:=0

for i=1 to n/2 do

suma:=a+a[n-i+1]

 

no tak mi sie wydaje

 

edit tylko nie pamietam od jakiej liczby sa indeksowane tablice w pascalu dla wielowymiarowych mozna zrobic analogicznie

Edytowane przez Linoge

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak by nie patrzeć, to musisz znać długość tablicy. Długość tablicy zapisz sobie podczas wprowadzania danych. Nawet jak tablica będzie dłuższa, to będziesz wiedział, ile cyfr jest wprowadzone.

Więc masz (ostrzegam, że pascala nie widziałem na oczy parę ładnych lat):

x := dlugosc_tab/2;for i:=0 to x dobeginsuma := tab[i] + tab[dlugosc_tab-1-i];czy_jest_pierwsza(suma); <- tu wywolanie funckji sprawdzania, czy to jest liczba pierwszaend;
Wyjaśnie "dlugosc_tab-1-i":

 

e1 e2 e3 e4 e5 e6 <- elementy

_0 _1 _2 _3 _4 _5 <-indeksy

 

Początkowo i=0, więc

tab=tab[0]=e1

tab[dlugosc_tab-1-i]=tab[6-1-0]=tab[5]=e6

 

Potem i=1, więc

tab=tab[1]=e2

tab[dlugosc_tab-1-i]=tab[6-1-1]=tab[4]=e5

 

W przypadku nieparzystej długości tablicy przed wykonaniem dzielenia (całkowitego) "dlugosc_tab/2" od dlugosc_tab należy odjąć 1, aby dzielenie się wykonało. Po zakończoniu pętli natomiast trzeba dodać:

i:=i+1;czy_jest_pierwsza(tab[i]);
Edytowane przez ULLISSES

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mogłby mi to ktos sprawdzic??

 

 

Dane jest ziarno generatora z z zakresu 1..10000. Wygeneruj tablicę A zawierającą 1000 liczb całkowitych

Liczby tablicy łączymy w pary: pierwszą z ostatnią, drugą z przedostatnią, itd. Każdą taką parę sumujemy i sprawdzamy, czy otrzymana suma jest liczbą pierwszą.

Wejście

 

Pierwszy wiersz wejścia zawiera liczbę całkowitą z z zakresu 1..10000.

Wyjście

 

Pierwszy wiersz wyjścia powinien zawierać jedną liczbę całkowitą: wyznaczoną ilość sum, które są liczbami pierwszymi. W wierszu drugim należy zapisać najmniejszą z otrzymanych liczb pierwszych lub liczbę 0, gdy żadna z sum nie była liczbą pierwszą.

 

program tab06;

 

var

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

d,i,n,sum,min,sump,p: integer;

x:longint;

 

begin

 

readln(n);

 

for i:=1 to n do

readln(a);

begin;

x:=n/2;

for i:=0 to x do

begin;

sum:=a+a[n-1-i];

end;

end;

for i:=1 to n do

p:=0;

begin;

for d:=2 to trunc(sqrt(sum)) do

begin;

if (sum mod d)=0 then

p:=1;

break;

end;

end;

begin;

sump:=0;

if p=0 then

sump:=sump +1

else

writeln(a, ' nie jest liczba pierwsza');

end;

begin;

min:=1;

if sum<min then

min:=sum;

if sump=0 then

min:=0;

 

end;

 

writeln('ilosc sum, ktore sa liczbami pierwszymi to',sump);

writeln('najmniejsza suma ktora jest liczba pierwsza to',min);

readln;

 

end.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...