2 programy w Pascalu z tablicami

Siema pomoże mi ktoś napisać dwa programy w Pascalu?

1.W tablicy N elementowej liczb całkowitych policzyć ilość elementów większych niż średnia wartość tych elementów.

2.Do tablicy 20 elementowej wylosować liczby z przedziału od 1 do 5.Policzyć

i wyświetlić ile razy wystąpiła każda wartość.Napisać procedurę która wyświetla indeksy i wartości elementów dodatnich tablicy.

W drugim programie udało mi się dojść do losowania liczb , ale nie wiem jak zrobić dalszą cześć ;/

L.B.G. , hmm to mi wygląda na zadanie domowe ze szkoły :x

Niestety się mylisz są to zadania na przygotowanie sie do olimpiady w szkole.Dostałem ich około 20 z niektórymi pomagał mi mój nauczyciel ,lecz teraz zachorował i nie ma mi kto pomóc;/

Ze szkoły? z przedszkola xD ale co do programu to tak:

1.Najpierw przelatujesz cala tablice i sumujesz jej elementy i ilość elementów, albo możesz poszukać jakiejś funkcji która zwróci ilość elementów coś takiego jest w php.

  1. dzielisz sumę przez ilość - masz średnią.

  2. Lecisz znów przez tablicę i sprawdzasz który z elementów jest większe od średniej if tab[$i] > sred then licznik++;

i tyle. tak na oko

2 nie chce mi sie pisac :stuck_out_tongue:

EDIT:

Bez obrazy ale z czym do ludzi… jak to na OI o_O

PS: W tym “pseudo” pascalu mogą być błędy bo ostatnio w c++ i php coś robie.

PS2: Poprawione :confused:

Alien6 , jak już coś piszesz to rób to stosując się do zasad polskiej pisowi!

-popraw treść swojego posta.

Ad. zadania 2

wylosować liczby z przedziału od 1 do 5(tzn. 1,2,3,4,5)

Przez losowanie otrzymujemy tablice T[1…N]

Pomysł

NP. Utworzyć tablice zliczająca Tz[1…5] typu integer (przyjmuje że utworzona tablica ma wartości zerowe)

Jak zliczać? Np.:

for j to N {N-ilość elementów tablicy T}

do

Tz[T ]:=Tz[T ] + 1;

end

Wyświetlenie wartości:

for i=1 to 5 do

Pisz(Wartość i wystąpiła Tz);

“Napisać procedurę która wyświetla indeksy i wartości elementów dodatnich tablicy”

To chyba nie do tego zadania, gdyż wszystkie wartości mamy dodatnie.

For i=1 do N do

jeśli T_>0 wtedy pisz indeks i ma wartość T_

w przeciwnym wypadku nic nie rób, bo mamy wartości ujemne lub zerowe.

Udało mi się wypocić takie cuda, ale wydaje mi sie że coś w nich jest nie tak;/

program 1

var tab:array[0..20]of byte;

i,a,licznik:byte;

srednia:real;

begin

randomize;

for i:=0 to 20 do

begin

tab[i]:=random(250);

a:=a+tab[i];

writeln('tab',i,':',tab[i]);

end;

srednia:=a/20;

for i:=0 to 20 do

begin

if tab[i]>srednia then

licznik:=licznik+1;

end;

writeln('srednia wynosi:',srednia);

writeln('ilosc liczb powyzej sredniej:',licznik);

readln();

end.

program 2

var tab:array[0..19]of byte;

     i,a,jeden,dwa,trzy,cztery,piec:byte;

 begin

 randomize;

  for i:=0 to 19 do

  begin

     repeat

       a:=random(6);

      until a>0;

     tab[i]:=a;

    case a of

    1 : begin

    jeden:=jeden+1;

    end;

    2: begin

    dwa:=dwa+1;

    end;

    3: begin

    trzy:=trzy+1;

    end;

    4: begin

    cztery:=cztery+1;

    end;

    5: begin

    piec:=piec+1;

    end;

  end;

 end;

 writeln('1jest:',jeden);

 writeln('2jest:',dwa);

 writeln('3jest:',trzy);

 writeln('4jest:',cztery);

 writeln('5jest:',piec);


 for i:=0 to 19 do

  writeln('tab',i,':',tab[i]);


  readln();

  end.

Pierwszy program nie będzie działać poprawnie, ponieważ brakuje początkowej inicjalizacji zmiennej a.

Trzeba dodać jeden wiersz:

...

randomize;

a:=0;

for i:=0 to 20 do

...

Poza tym zawsze w pętlach po tablice najlepiej używać Low, High lub Length:

for i:=0 to High(Tab) do

Drugie zadanie zrobione beznadziejnie :roll:

var tab:array[0..19]of byte;

var v:array[1..5] of integer;

var x:byte;

var i:Integer;

begin

  randomize;

  for i:=low(v) to high(v) do v[i]:=0;

  for i:=0 to high(tab) do

  begin

    x:=1+random(5);

    tab[i]:=x;

    inc(v[x]);

  end;

  for i:=low(v) to high(v) do writeln(i,' jest: ',v[i]);

  for i:=0 to high(tab) do writeln('tab[',i,']: ',tab[i]);

  readln();

end.