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
a jak są w tym pliku zapisane, oddziela je jakiś znak ?
podobno nie ma roznicy czym są pooddzielane ale powiedzmy ze spacjami, nie mam do dyspozycji tablic, rekordow ani nic podobnego
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ć.
Poszukaj gotowej funkcji explode dla delphi, powinno gdzieś być w serwisie ja obecnie nia mam czasu na szukanie
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.
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)
...
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
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?
Sprobuj z while not eof(plik) do wtedy program bedzie wczytywał pokolei wszystkie linie aż dojdzie do końca