ile liczb w ciągu?

0

mam taki problem, mianowicie w pliku w jednej linii mam zapisany ciąg liczb, nie wiadomo ile ich jest, jak obliczyc ich srednią arytmetyczną i w ogóle jak sie dowiedziec ile ich jest? z gory wielkie dzieki za pomoc

0

a jak są w tym pliku zapisane, oddziela je jakiś znak ?

0

podobno nie ma roznicy czym są pooddzielane ale powiedzmy ze spacjami, nie mam do dyspozycji tablic, rekordow ani nic podobnego

0

Mogą być gdzieś pewne nieścisłości - pisane bez kompilatora. Ale głównie chodzi o algorytm - wczytujesz liczbe, dodajesz ją do sumy i inkrementujesz ilość liczb - potem po prostu średnia to suma przez ilość liczb.

var
  plik: TextFile;
  suma, ilosc, temp: integer;
  srednia: double;
begin
  ilosc := 0;
  suma := 0;
  AssignFile(plik, 'sciezka');
  Reset(plik);
  while not eof(plik) do
  begin
    read(plik, temp);
    suma := suma + temp;
    ilosc := ilosc + 1;
  end;
  srednia := suma / ilosc;
end;

Założyłem, że liczby są typu całkowitego, ale dla zmiennoprzecinkowych też będzie działać.

0

Poszukaj gotowej funkcji explode dla delphi, powinno gdzieś być w serwisie ja obecnie nia mam czasu na szukanie

0

To powinno pomóc http://4programmers.net/Delphi/Artyku%C5%82y/Bazy_danych_oparte_na_w%C5%82asnych_formatach
A konkretniej część Proste pliki tekstowe... Reszta tekstu ma się nijak do tematu postu.

0
Smiglo napisał(a)

Mogą być gdzieś pewne nieścisłości - pisane bez kompilatora. Ale głównie chodzi o algorytm - wczytujesz liczbe, dodajesz ją do sumy i inkrementujesz ilość liczb - potem po prostu średnia to suma przez ilość liczb.

var
  plik: TextFile;
  suma, ilosc, temp: integer;
  srednia: double;
begin
  ilosc := 0;
  suma := 0;
  AssignFile(plik, 'sciezka');
  Reset(plik);
  while not eof(plik) do
  begin
    read(plik, temp);
    suma := suma + temp;
    ilosc := ilosc + 1;
  end;
  srednia := suma / ilosc;
end;

Założyłem, że liczby są typu całkowitego, ale dla zmiennoprzecinkowych też będzie działać.

Jesli liczby maja byc w jednej linii to wystarczy warunek SeekEoF(Plik) sprawdzic raz (na poczatku), poza tym wydaje mi sie ze czytanie kolejnych liczb nalezy umiescic w petli:

While not(SeekEoLn(Plik)) do
Begin
Read(Plik, temp)
...
0

dzieki wszystkim za pomoc, juz wszystko jasne :) chyba zaczne czesciej odwiedzac to forum jak bede miał jakies problemy bo odpowiedzi są błyskawiczne, jeszcze raz dzieki bardzo

0

a i jeszcze jedno, mam taki plik:

001/zrodlo 1
30 20 40 10 98 90
002/zrodlo 2
50 40 50 0 87 65 09 65 43
003/zrodlo 3
50 60 50 80 90
003/zrodlo 3
50 13 50 55 90
.... i tak iles tych zrodeł, zapisanych w dwoch linijkach

mam napisana procedure ktora oblicza mi srednia i sume liczb ciagu pomiarow dla jednego zrodla, jak napisac procedure ktora wykorzystując tą poprzednią obliczy to dla wszystkich (nie wiadomo ilu) zrodel?

0

Sprobuj z while not eof(plik) do wtedy program bedzie wczytywał pokolei wszystkie linie aż dojdzie do końca

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