Zadanie jest stosunkowo proste.
Wektor w Pascalu to nic innego, jak tablica 1-wymiarowa.
Ale ponieważ to jest Twoje zadanie (zapewne ze szkoły), umówmy się, że zrobię tylko połowę, a resztę Ty.
Pniższy programik został napisany w Delphi (aplikacja konsolowa). Wystarczy tylko skopiowć, wkleić i skompilować.
Jeśli masz tylko Pascala (np. BP 7.0), usuń linię {$APPTYPE CONSOLE} i zamień wszystkie AssignFile na Assign oraz CloseFile na Close.
Wówczas powinien się dać skompilować bez większych problemów (nie mam w tej chwili zainstalowanego Pascala, więc nie mogę sprawdzić).
Krótki opis:
Procedura UtworzPlikZDanymi tworzy plik tekstowy vector.txt i zapisuje w nim 100 losowych liczb rzeczywistych z zakresu <0,100), zaokrąglonych do 2 miejsc po przecinku (1 linia - 1 wartość).
W pliku tym będą się znajdować dane wejściowe dla programu.
Jeśli masz już przygotowany plik o takiej strukturze i nazwie, możesz usunąć wywołanie tej procedury (linia UtworzPlikZDanymi; na końcu), albo nawet całkowicie usunąć tą procedurę.
Procedura LICZ.
Zdefiniowane są tutaj m.in. dwie 1-wymiarowe tablice (wektory), 100-elementowe.
W pierwszej (vect) będzie pamiętany wektor wejściowy, w drugiej (vect2) wektor wynikowy.
Na początku procedury odbywa się odczyt danych z pliku vector.txt (piersza pętla FOR). Dane te są zapisywane w tablicy vect.
Odczyt danych do tablicy vect można też zrobić za pomocą Readln, ale komu by się chciało ręcznie wprowadzać 100 wartości? Dlatego wybrałem plik.
W drugiej pętli FOR liczone są średnie arytmetyczne sąsiadów każdego elementu tablicy vect, które są następnie wprowadzane do tablicy vect2. Przy czym lewym sąsiadem elementu 1-szego jest element ostatni, a prawym sąsiadem elementu ostatniego, czyli 100-ego, jest element pierwszy.
Trzecia i ostatnia pętla FOR, to zapis wektora vect2 do pliku tekstowego vector2.txt.
program vector;
{$APPTYPE CONSOLE}
procedure UtworzPlikZDanymi;
var
i: integer;
f: TextFile;
xr: Real;
begin
AssignFile(f, 'vector.txt');
Rewrite(f);
Randomize;
for i := 1 to 100 do
begin
xr := Random * 100;
Writeln(f, xr:0:2);
end;
CloseFile(f);
end;
procedure LICZ;
var
f: TextFile;
vect, vect2: array[1..100] of Real;
i, c: integer;
x, x1, x2: Real;
s: string;
begin
AssignFile(f, 'vector.txt');
Reset(f);
for i := 1 to 100 do
begin
Readln(f, s);
val(s, x, c);
if c <> 0 then
begin
Writeln('Nieprawidlowe dane w pliku wejsciowym !');
CloseFile(f);
Exit;
end;
vect[i] := x;
end;
CloseFile(f);
for i := 1 to 100 do
begin
if i = 1 then
begin
x1 := vect[100];
x2 := vect[2];
end
else if i = 100 then
begin
x1 := vect[99];
x2 := vect[1];
end
else
begin
x1 := vect[i - 1];
x2 := vect[i + 1];
end;
vect2[i] := (x1 + x2) / 2;
end;
AssignFile(f, 'vector2.txt');
Rewrite(f);
for i := 1 to 100 do
Writeln(f, vect2[i]:0:2);
CloseFile(f);
end;
{ początek programu }
begin
UtworzPlikZDanymi;
LICZ;
end.
Pozostała jeszcze "analiza cykliczna" i "eliminacja zer".
Ale to już należy do Ciebie !