ďťż

Ładny brzuch

Witam
Od jakiegos czasu pisze program jednak napotkalem problem z ktorym nie potrafie sobie poradzic. Aby uproscic wytlumacze to tak:
Chcem aby do programu tylko raz mozna bylo wprowadzic taki sam text. Stworzylem wiec zmienna tablicowa oraz napisalem funkcje dodajaca 1 tablice do zmiennej i przypisujaca jej wartosc jaka wprowadzil uzytkownik(text). Jednak problemem jest zmienna if ktora ma sprawdzac czy dany text nie istnieje czasem w jakims indexie zmiennej tablicowej. Funkcja If ma sprawdzic najpierw cala zmienna od low do high i ma sie nie wykonac gdy tablica z wartoscia jaka wprowadza uzytkownik istnieje. Mam nadzieje ze mnie zrozumieliscie :D . Pozdrawiam i oczekuje szybkiej odpowiedzi.



byla := false; for i := low(tablica) to high(tablica) do begin byla := text = tablica[i]; end; if (not byla) then ...
Użytkownik Capellini edytował ten post 06 sierpień 2007, 19:36
zamiast tablicy TStringList posortowana i przy wstawianiu duplikatu będzie albo wyjątek albo sobie sprawdzisz przed wstawianiem czy już jest. Posortowana TStringList jest indeksowana więc bedzie dużo szybciej niż przelecenie całej tablicy.

Capellini pomysl dobry ale wyskakuje blad przy funkcji for :(
Misiekd jak wykozystac to w praktyce? Moglbys opisac badz czesciowo przyblizyc mi jak powinien wygladac kod? Z gory dzieki




Capellini pomysl dobry ale wyskakuje blad przy funkcji for :(
To moze laskawie napiszesz jaki blad? czy tez mamy zgadywac... swoja droga ja juz zgadlem (zapewne) - nie zadeklarowales zmiennej i?
"Chcem", "zmienna if" - n/c


Misiekd jak wykozystac to w praktyce? Moglbys opisac badz czesciowo przyblizyc mi jak powinien wygladac kod? Z gory dzieki
przecież dokładnie Ci napisałem co zrobić
1. tworzysz obiekt typu TStringList
2. ustawiasz mu, że ma być posortowany
3. przed wpisaniem nowej wartości sprawdzasz, czy przypadkiem nie ma już takiej
4. jak nie ma to wpisujesz
5. jak jest to ją pomijasz

cały kod to w sumie 4 linijki (bez deklaracji zmiennej TStringList), wszystkiego można się domyśleć przeglądając jakie TStringList ma właściwości i metody. Czego się nie domyślisz sprawdzisz w helpie (na 99% jest tam nawet przykład).
Tak wiem, rozpisałem się a mogłem te 4 linijki napisać - ale nie o to tu chodzi - jak dziś sam znajdziesz to jutro nie będziesz pytał o równie błache rzeczy (być może)

Migajek poczatkujacy to ja jestem ale zobacz ze akurat wpadlem zeby zdeklarowac zmienna I. Niski poziom ktory zaprezentowalem wczesniej to zapewne wina remontu, grajacego radia i balaganu, nie mam podzielnosci uwagi niestety. Zawsze staram sie pisac posty estetycznie i poprawnie ortograficznie. Ale do rzeczy ;)
Bledu nie skopiuje bo uzywam francuskiego kompilatora ale nie chodzi o blad w kompilacji tylko o blad podczas dzialania programu. Chodzi o cos z odwolaniem do pamieci wiec pomyslalem, ze to wina dynamicznej zmiennej tablicowej wiec zmienilem na zwykla zmienna tablicowa i to okazalo sie strzalem w dziesiatke. Doszedlem do wniosku ze program odwoluje sie do zmiennej ktora nie ma jeszcze tablic wiec postanowailem dodac do zadan TForm1 utworzenie 1 tablicy jednak blad pojawia sie nadal. Calosc jest w timerze wiec dodanie tam w/w funkcji odpada. Program wyglada nastepujaco: Form1 a na nim Timer1.
Timer1 odpowiadzialny za pobranie danych i sprawdzenie czy juz wczesniej nie byly takie same a nastepnie wysyla i dodaje tablice.
Form1 ma dodac 1 tablice do zmiennej Tablica na samym poczatku wlaczenia programu i zapobiec bledowi jednak blad nadal wyskakuje.
Jutro sprobuje cos wykombinowac lecz chetnie wyslucham waszych rad. Chcialbym rowniez dowiedziec sie czy jest mozliwe stworzenie zmiennej tablicowej dynamicznej z 1 tablica "na start" to na pewno zapobiegloby bledowi.
Pozdrawiam!

Edit: Dzieki za warna migajek :no:
Edit2: mogles napisac uzasadnienie na pw to bym Ci od razu odjal ;) - m
Edit3:
Poradzilem sobie z problemem, wina okazalo sie przypisanie do zmiennej tablicowej poprostu zostaly nawyki z C++. Demon dzieki za pomoc gdyby nie Ty siedzialbym jeszcze nad tym. Migajek dzieki za odjecie warna to juz drugi raz :o
Użytkownik mati0090 edytował ten post 07 sierpień 2007, 21:09
Po prostu zrób tak:
var dane: string; // wprowadzane dane tablica: array of string; // tablica z danymi i,ile: integer; // zmienne pomocnicze begin try // eliminuj błędy if Length(tablica)>0 then for i:=low(tablica) to high(tablica) do if tablica[i]=dane then exit; ile:=Length(tablica); SetLength(tablica,ile+1); tablica[ile]:=dane; except on exception do; end; end;
Lub coś w tym stylu :P

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •