Pobieranie najwiekszych wartosci

0

Witam..mam taki problem
mam plik ktory zawiera np takie dane:
227.5
220.0
229.0
224.0
233.0
236.5
206.5
224.5
242.0
241.5
254.5
229.0
232.0
262.5
225.5
240.0
239.5
....
....
Z tych danych rysuje sobie wykres i potrzebuje wyciagnac z tych danych najwyzsze wartosci tzn. takie "piki" na wykresie...tych pikow moze byc wiele...Myslalem nad takim algorytmem ktory w petli czyta kolejne wiersze..jesli kolejny wiersz jest wiekszy od poprzedniego to przypisuje sobie jego wartosc do zmiennej takiej dynamicznej max_czasowe. Jesli w ktoryms obiegu petli wartosc obecnego wiersza jest mniejsza od max_czasowe to moje max_czasowe jest moim pikiem..a jak to zrobic jak jest nie wiadomo ile tych pikow??przypuszczam ze deklarujac zmienna

piki : array of double;

i czy da to sie zrobic na pliku textowym..ktory zadeklarowalem jako

plik :TextFile

bardzo prosze o pomoc

0

musisz wiedzieć, które to są te piki, bo wywróżyć to się nie da. Możesz przyjąć, że np. te których wartości są większe niż 75% maksymalnej albo 2 * wartość średnia czy jak tam sobie to ustalisz. No a jak masz tą granicę to chyba nie będzie problemu ze znalezieniem "pików"

A co do pytania czy się da, to tak da się - wczytujesz linie (w której jest TYLKO jedna liczba) poleceniem ReadLn, a potem StrToFloat konwertujesz do typu rzeczywistego

0

Witam, po co ci do tego tablica ? wystarczy jedna zmienna, poza tym dlaczego chcesz pracowac na pliku tekstowym skoro masz konkretne dane typu real

var max, liczba : real;
      Plik : File of real;
      
begin
 Assign (Plik, 'c:/dane.txt');
 Reset (plik);
 max := 0;
 while not eof (plik) do
   begin
     readln(Plik, liczba);
     if liczba > max then max := liczba;
   end;
 closeFile(plik);
end;

//pisane w locie wiec nie wykluczone, ze wkradl sie blad :)

0

w pliku tym nie ma jedynie wylacznie tych wartosci..
poza tym to co mi pokazales jest odczytywaniem najwiekszej wartosci..odnojdywanie tych pikow najwieszych chyba jest bardziej skomplikowane gdyz...
wykres przedstawia sie tak:
http://hoth.amu.edu.pl/~ptaku/piki.jpg
i chodzi mi o to zeby "wyciagnac" z pliku wartosci tych pikow

0

moja propozycja jest prosta -

  1. Na podstawie wykresu wyszukaj największy pik, a dokładnie największą wartość.
  2. Na podstawie największego piku ustal kryterium wybierania wszystkich, np. piki liczą się jeśli ich wartość przekracza 50% piku głównego.
  3. Teraz wyszukaj wszystkie piki - czyli jesli poprzedni i następny punkt był mniejszy to mamy pik, a następnie sprawdzaj warunek czy go zliczać.
  4. Po znalezieniu zwiększaj liczbę odnalezionych i na końcu masz wyniki pików wg. twojego kryterium
0

hmmm..moze jakas pomoc w postaci kodu??

0

Ile płacisz?
To nie jest problem na wklepanie 12 linii kodu ale chodzi o napisanei programu. tutaj możesz zwrócić się o koncepcję, pomoc w składni, ale nie pisanie programów.
ale co mi tam:
ad1.
wartoscmax=wartosc(dana 1);
pikmax= dana 1;
petla po wszystkich danych
begin
if wartosc(dana aktualna)>wartoscmax then
begin
wartoscmax=wartosc(dana aktualna);
pikmax= dana aktualna;
end;
end;

Na wyjsciu bedzisz mial aktualnego piak wraz z wartoscia

ad.2)
kryterium np. 50 %

wartosckryterium=50/100*wartoscmax;

ad.3 i ad.4)

petla po wszystkich danych-2
begin
wartosc1=wartosc(dana aktualna);
wartosc2=wartosc(dana aktualna+1);
wartosc3=wartosc(dana aktualna+2);
licznik:=0;
if (wartosc1<wartosc2)and(wartosc2>wartosc3)and(wartosc2>wartosckryterium) then
begin
znalezlismy pika do zliczenia;
licznik:=licznik+1;
end;
wyswietl licznik;
end;

w licznik bedziesz mial ilosc pikow spelniajacych kryterium.
sprawe 1 i ostatniego elementu sam sobie zrob - bo jesli bedzie tam pik to nie zostanie to zliczone:)

0

przelec w petli po wszystkich wartociach.
potem sprawdzaj sasiedztwo tej wartosci, powiedzmy o wartosci 10 punktow, i sprawdzaj czy ten wybrany jest najwiekszy sposrod tego sasiedztwa, jesli tak bedzie to bedziesz mial pik, zapisujesz, i szukasz dalej.

0

Powiem tak, problem polegał na tym, że z góry nie było wiadomo, jaka jest następna wartość. Rozwiązane przez GG. EoT.

//Sorry, źle się wyraziłem. Po prostu dane były czytane i w locie obrabiane, jest ich zbyt dużo, by powiedzmy wrzucić do jakiejś tablicy i się odwoływać gdzieś tam :)

0

Skoro tak, to problem pytacza bo zaczął sprawę od :

Witam..mam taki problem
mam plik ktory zawiera np takie dane:
227.5
220.0
229.0
224.0
...

Czyli twierdził ze zna wyniki i je obrabia ...

0

Nie chodzilo mi przeciez o podanie calego kodu..tylko jakas pomoc..naprowadzenie jak wykorzystac algorytm. Jesli chodzi o dane z pliku to byly one znane ale nie znalem ilosci pikow ktore moga byc.
Dziekuje za odpowiedzi

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