PROJEKT prosze o pomoc

0

bardzo bardzo rardzo prosze o pomoc w rozwiazaniu projektu
[???]
Opracuj algorytm, w którym po wczytaniu wartości wektora W(100) dokonuje się zamiany jego elementów średnią arytmetyczną sąsiadów (lewym sąsiadem W(1) jest W(100), a prawym W(100) jest W(1)). Analiza wektora powinna przebiegać cyklicznie, poczynając od elementu W(1), aż do wyeliminowania zer. Jeżeli eliminacja zer jest niemożliwa - należy uwzględnić w programie sygnalizację takiej sytuacji.

  1.  Tytuł projektu,2.      Spis treści,3.      Specyfikacje programu, czyli zadanie, które ma realizować program opisane w języku naturalnym,4.      Założenia projektowe, tj. opis dodatkowych celów i warunków, które program ma spełniać i które wynikają z uzgodnień z prowadzącym,5.      Algorytm rozwiązania przygotowany w programie ELI,6.      Kod programu w języku programowania,7.      Kilka zestawów danych testowych oraz wynik działania programu dla tych danych,8.      Dokumentacja użytkownika, czyli informacje dla przyszłego użytkownika, tak aby mógł się dowiedzieć co robi program, w jaki sposób go uruchomić, jakie dane dostarczyć i gdzie znaleźć wyniki jego działania.Załącznik- dyskietka lub płyta CD zawierające projekt zapisany w ELI, plik źródłowy (w języku Pascal) i plik po kompilacji.
    
0

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 !

1 użytkowników online, w tym zalogowanych: 0, gości: 1