Autor Téma: Pomoc s urcenim najdlhsieho drotu  (Přečteno 2097 krát)

Offline michalp

  • Příspěvků: 4
  • Karma: 0
Pomoc s urcenim najdlhsieho drotu
« kdy: 24-09-2012, 19:33:42 »
Dobry den,

Potreboval by som  poradit s delphi ulohov
Nacitam si cez assignfile tento txt subor. (prvej je ID, druhe je dlzka)
Citace
1 120
2 450
3 120
4 170
5 250
6 800
7 760

Ked mam nacitany subor (ReadLn(myFile,x,d);)
Tak chcem zistit, ktory kabel je najdlhsii a ten chcem zafarbit cervenou farbou.
Akom mam postupovat? Asi mam problem, ze neviem sa dostat k nacitaniu tej druhej hodnoty. Lebo ked davam
Kód: Delphi [Vybrat]
  1. d[i]
tak to nejde.

Kod mal vyzerat nejako takto:
Kód: Delphi [Vybrat]
  1. begin
  2. max:=0;
  3. for i:=1 to 7 do
  4. if d[i] > max do
  5. max:= d[i];
  6. end;
  7.  
Ako teda zistim najvyssiu hodnotu? Myslim si, ze je problem prave v tom zapise
Kód: Delphi [Vybrat]
  1. d[i]
ktory delphi nevie citat, kedze to nie je klasicky array?
Ako potom zafarbim ten kabel ID6? Viem princim zararbenia, ale ako programu poviem, aby zafarbil prave to - pomocou while?
« Poslední změna: 24-09-2012, 19:42:38 od michalp »

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #1 kdy: 24-09-2012, 20:56:57 »
To už se dělají barevné texťáky ;D ?

Ne teď vážně, kam načítáš ten texťák (co se chystáš obarvovat, jakou komponentu) ?
Jinak ReadLn slouží mj. k načtení řádku souboru, takže ty bys měl číst ve smyčce nějak takhle:

Kód: Delphi [Vybrat]
  1. var
  2.   S: string;
  3.   InputFile: TextFile;
  4. begin
  5.   // tady si soubor otevřeš
  6.   while not Eof(InputFile) do
  7.   begin
  8.     ReadLn(InputFile, S);
  9.     // tady máš v proměnné S načtený řádek souboru
  10.   end;
  11.   // a tady soubor zavřeš
  12. end;

Vsadím se ale, že v tvém případě půjde použít jednodušší načtení (záleží kam chceš ty řádky načíst).
Až mi z toho TextFile zamrazilo ;D
« Poslední změna: 11-12-2012, 15:55:28 od TLama »

Offline Jan Fiala

  • Příspěvků: 49
  • Karma: 0
    • PSPad editor
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #2 kdy: 25-09-2012, 06:47:30 »
Zapamatuj si index nejdelšího prvku, ne vlastní délku. Pak budeš moct jednoduše zabarvit příslušnou buňku.
Ve tvém případě (tak, jak to máš udělané) by to znamenalo si ve druhém průchodu si najít buňku znovu podle hodnoty.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1136
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #3 kdy: 25-09-2012, 09:18:23 »
popravde, pokud to chapu dobre, tak by mozna stalo za to zkusit TStringList a property Delimiter nastavit na mezeru,

pak by jen stacilo stringlist.LoadFromFile,
projit string list pomoci for,
ID by bylo v stringlist.Names[], hodnoty stringlist.ValueFromIndex[],

;)

pokud se chces trochu trapit,
tak pouzijes ReadLn a dany radek pomoci Pos a Copy rozdelit na ID a hodnotu

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2668
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #4 kdy: 25-09-2012, 09:50:46 »
popravde, pokud to chapu dobre, tak by mozna stalo za to zkusit TStringList a property Delimiter nastavit na mezeru,

pak by jen stacilo stringlist.LoadFromFile,
projit string list pomoci for,
ID by bylo v stringlist.Names[], hodnoty stringlist.ValueFromIndex[],
ijes ReadLn a dany radek pomoci Pos a Copy rozdelit na ID a hodnotu
Popravde receno jsi asi nepochopil, k cemu je vlastnost Delimiter a Delimited text  ;)

Mohl by to udelat v duchu tve rady, ale dvoukolove:
1. nejdriv nacist vsechny radky do jednoho stringlistu pomoci LoadFromFile
2. a pak misto parsovani obsahu radku pouzit druhy stringlist, u ktereho by se nastavil Delimiter na mezeru a radek z prvniho stringlistu se priradil do DelimitedText. Pak by mel v sl2[1] poradove cislo, v sl2[2] delku.

Kdyz se tu TLama pohorsoval nad stylem vyuky programovani, tak tohle jsou prece vsechno naprosto zastarale techniky vedouci k matlani kodu a ne k nejakemu inzenyrskemu pristupu: dneska bychom meli navrhnout tridu TDrat a dalsi tridu TSeznamDratu a v nich implementovat odpovidajici metody a ne vytvaret nejake nahodile zblitky...

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 8
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #5 kdy: 25-09-2012, 10:22:40 »
popravde, pokud to chapu dobre, tak by mozna stalo za to zkusit TStringList a property Delimiter nastavit na mezeru,

pak by jen stacilo stringlist.LoadFromFile,
projit string list pomoci for,
ID by bylo v stringlist.Names[], hodnoty stringlist.ValueFromIndex[],

V tomto případě to je NameValueSeparator

TStringList.NameValueSeparator:=' ';
TStringList.LoadFormFile
.
.
.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1136
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #6 kdy: 25-09-2012, 11:35:23 »
moje chyba, presne toto sem mel na mysli a neni to ani matlani kodu.

k TDrat a TSeznamDratu myslim michalp jeste nedospel ;)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2668
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #7 kdy: 25-09-2012, 13:01:49 »
k TDrat a TSeznamDratu myslim michalp jeste nedospel ;)
Pokud nedospel k tridam a objektum a pohybuje se nekde na urovni rozlisovani sekvence, selekce, iterace, procedura/funkce a vyraz, tak by asi nemel pouzivat ani objekty, nemyslis? A pokud je ma pouzivat, tak by mel vedet, wo co go a pouzivat je spravnym zpusobem a ne psat proceduralni nezapouzdreny spagety kod...

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #8 kdy: 25-09-2012, 13:45:09 »
@michalp - v čem zobrazuješ výstup toho texťáku ? Předpokládám StringGrid, ale radši
se zeptám...


Ještě mě napadá, co třeba COM server ? Ten by takových drátků mohl na požádání vyrobit,
že by je ani místní nestačili odvážet do sběrny. A ještě by se o ně mohl podělit se spoustou
dalších aplikací, dychtících po barevných drátcích.

Ne, omlouvám se, ale nějak jsem se v té diskuzi ztratil...

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1136
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #9 kdy: 25-09-2012, 22:27:58 »
2 pf1957:
to uz by byla diskuse na hodne dlouho,
me slo o to, jak to udelat jednoduse a efektivne, coz stringlist by mel splnit,
nemusi se nijak snazit s parsovanim apod.

pouzivat objekty u takovedle kraviny by stejne bylo jak kladivem na mravence,
to uz snad pole a recordy

jinak, at si zvoli podle toho, k cemu to bude slouzit

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2668
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Pomoc s urcenim najdlhsieho drotu
« Odpověď #10 kdy: 26-09-2012, 07:39:31 »
pouzivat objekty u takovedle kraviny by stejne bylo jak kladivem na mravence,
to uz snad pole a recordy
Ohanet se primitivnosti ulohy muze ten, kdo zna nekolik reseni a vybira pro nej v danou chvili to nejvyhodnejsi.
Ale pokud se nekdo uci programovat, tak se to ma ucit tak, jak se to spravne dela a prave na trivialnich ulohach, aby to snadno pochopil. Protoze kdyz se nenauci objektove myslet na jednoduchych vecech, tak u slozitejsich uz je zpravidla nedokaze vubec a pak jsou z toho zblitky ala VCL...

jinak, at si zvoli podle toho, k cemu to bude slouzit
Naprosty souhlas, ale pokud by radne studoval, tak se nemusi ptat na to, jak ma resit svuj domaci ukol.