Anonymní profil Jan – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jan – Programujte.comAnonymní profil Jan – Programujte.com

 

Příspěvky odeslané z IP adresy 178.255.168.–

Vzdělání › Materiály ke studiu
13. 3. 2017   #215234

Zdravím,

podal jsem si přihlášku na Aplikovanou informatiku a chtěl bych vás moc poprosit, zda neznáte nějaké dobré učební zdroje, nějaké základy programování (nejlépe úplně od začátku), které by mi mohli pomoct. 

Nutno podotknout, že mám základy html a css, jsem schopen udělat webovou stránku (v rámci mých možností), ale jsem z gymplu, takže nic jiného o programování moc nevím. (to html a css jsem se v podstatě učil taky sám... ale ne nikterak extrémně hluboko).

Ty materiály mohou být klidně v angličtině, s AJ nemám absolutní problém - videa, pdfka, klidně i literatura..., něco, kde by to šlo hezky systematicky za sebou...

Mockrát děkuji a přeji hezký den :) 

Jan
Delphi › Potíže s cykly v programu do…
9. 6. 2014   #190893

Jo, měl jsem to hodně zmotaný...právě v tom poli a jeho indexech. já to změnil ještě, než jsem si to přečetl od tebe

Mě napadlo, že sice používám ty šikovné operátory pro inkrementaci podle tebe, ale že nejspíš nejdou použít pro dvojrozměrné pole, když nebude vědět jakou hodnotu z těch dvou indexu po něm žádám. Tak jsem to upravil a hlavně jsem si všiml, že v té funkci pro hledání vzdáleností nemám pro n přiřazenou žádnou hodnotu...a já to celou dobu přes něj zkoušel (achjo) ...i to jsem tam dodal, a teď to běží...   samozřejmě je to pořád asi dost zbastlený, ale já mám hlavně radost, že to sype výsledky :))

Takže už mi to jde i s tím mým konstantním polem (vlastně jsem nikdy nepochopil, proč je zadaný konstantama, ale můžu do něj ukládat víc hodnot, než je právě velikost toho pole...jen si musím dávat pozor, že když jich zadám méně, tak se ve zbytku objevují nuly...nj vlastně je to dost nešikovný, ale já nevím, jestli se tím mám ještě zabývat, moc času mi nezbývá)...popravdě jiný, než s tou konstantou, neumím :) dynamický jsem se neučil

Takže díky za všechny ty tipy, vezmu si to k srdci a zkusim to podle toho trochu vyladit. Pomohl jsi mi!

P.S.: nevim, jestli je to možny, ale zatim jsem to vyřešil takhle intuitivně (funguje to):

Function NejblizsiVzdalenost (Pole : Tpole; out PrvniIndex, DruhyIndex : integer):double;
var
  j,k        : integer;
  Vzdalenost : double;
begin
n          := StrToInt (frmHlavni.edtPocet.text);
PrvniIndex := -1;
DruhyIndex := -1;
Result     := MaxInt;
for j := Low(Pole[j]) to Pred(n) do
  for k := Succ(j) to High(Pole[j]) do
    begin
      vzdalenost := sqrt(sqr(Pole[1,j]-Pole[1,k])+sqr(Pole[2,j]-Pole[2,k]));
      if vzdalenost < Result then
        begin
          Result     := vzdalenost;
          PrvniIndex := j;
          DruhyIndex := k;
        end;
    end;
end;
Jan
Delphi › Potíže s cykly v programu do…
8. 6. 2014   #190884

Já myslím, že je to vzásadě to samé, nebo ne?

Zase tam nemám ještě všechno a ty hodnoty si nechám jen tak ledabyle ukázat ve zprávě - no jestli jsem to špatně pochytil z toho tvého kódu a něco důležitého chybí, že se to kvůli tomu nerozchodí, tak jsem si toho zatím nevšim.

Tady je tedy celý můj...akorát že vůbec neporovnává všechny kombinace

unit dva_body_nearest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Math;

const

Max_pocet = 100;
Pocet_souradnic = 2;

type
  Tpole = array [1..Pocet_souradnic,1..Max_Pocet] of real;
  TfrmHlavni = class(TForm)
    btnGeneruj: TButton;
    edtPocet: TEdit;
    edtMIN: TEdit;
    edtMAX: TEdit;
    sgPole: TStringGrid;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure btnGenerujClick (Sender : TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmHlavni     : TfrmHlavni;
  Pole          : Tpole;
  n,i,j         : integer;
  PrvniIndex    : integer;
  DruhyIndex    : integer;
  MinVzdalenost : double;
implementation

{$R *.dfm}

procedure NahodneGeneruj (var Pole:Tpole; sgpole : TStringGrid; n : integer);
var
Minimum, maximum : integer;
i,j : integer;
begin
  Randomize;
    n:= StrToInt (frmHlavni.edtPocet.text);
    Minimum := StrToInt (frmHlavni.edtMIN.text);
    Maximum := StrToInt (frmHlavni.edtMAX.text);

    sgPole.ColCount := 2;
    sgPole.RowCount := n;

      for i := 1 to 2 do
        for j := 1 to n do

          Pole [i,j] := RoundTo (Minimum + Random* (Maximum-Minimum),-2);


      for i := 0 to n do
        for j := 0 to 2 do

          begin
            sgPole.Cells[j,i] := FloatToStr(Pole[j+1,i+1]);
          end;

end;

Function NejblizsiVzdalenost (Pole : Tpole; out PrvniIndex, DruhyIndex : integer):double;
var
i,j           : integer;
Vzdalenost    : double;
begin
PrvniIndex := -1;
DruhyIndex := -1;
Result     := MaxDouble;
  for i := Low(Pole) to Pred(High(Pole)) do
    for j:= Succ(i) to High(Pole) do
      begin
        vzdalenost := sqrt(sqr(Pole[1,i]-Pole[1,j])+sqr(Pole[2,i]-Pole[2,j]));
        if vzdalenost < Result then
          begin
            Result := vzdalenost;
            PrvniIndex := i;
            DruhyIndex := j;

          end;
      end;
end;

procedure TfrmHlavni.btnGenerujClick(Sender: TObject);
begin
NahodneGeneruj (pole,sgpole,n);
Showmessage (FloatToStr(NejblizsiVzdalenost(Pole,PrvniIndex,DruhyIndex)));
Showmessage (FloatToStr (PrvniIndex)+' , '+FloatToStr(DruhyIndex))
end;

end.
Jan
Delphi › Potíže s cykly v programu do…
8. 6. 2014   #190882

#8 Sniper
A tobě to takhle fungovalo? Já jsem to udělal skoro stejně a vyskakuje mi vždy jen to, jak jsou od sebe daleko první dva. :-/

Jan
Delphi › Potíže s cykly v programu do…
8. 6. 2014   #190879

Díky za ten program,

je to super takhle vidět celý, jenže to asi nemůžu použít.

Ale zkusím se podle toho trochu řídit.

Jan
Delphi › Potíže s cykly v programu do…
8. 6. 2014   #190877

#2 p3can
Díky, že ses na to podíval...já vím že to mám směšně udělaný :D asi bych to uměl pak překopat na podprocedury - jenže tohle je něco jako pracovní verze, já si na tom testuju, jestli by ten algoritms vůbec šlapal.

Takže to beru na vědomí, že to nazívám generátorem čísel, ale vlastně dělá to všechno možný...předělám.

No potom volám tu proceduru po zmáčknutí tlačítka generuj, takže vlastně program vyplní tu mřížku hodnotami z pole a pak bych chtěl aby hned našel největší a teď jen pracovně mi tu vzdálenost vyhodil ve zprávě. Tu taky volám po zmáčknutí tlačítka...

Jenže jde o to, že mi to nedělá kombinaci všech bodů...aby pro první bod vyzkoušel všechny kombinace až do posledního, pak přeskočil na druhý a zase udělal kombinace se všemy zbývajícími, takhle až do konce...a ja dělám chybu v tom jak mam nadeklarovat to, aby vždy poskočil na další bod, tam chvilku setrval a projel zbytek...ten skok mi prostě nevychází...protože mi to vždy udělá jen všechny kombinace s tím úplně posledním (a já to vůbec nechápu jak)...

zjistil jsem to kontrolu počítal jsem si to znova v excelu :) takže ten program počítá správně, jenže pouze vzhledem k poslednímu bodu

určitě to musí být strašný na tohle koukat, ale já se tím živit nebudu, a není to pro mě zas úplně jednoduchý ;)    

Jan
Delphi › Potíže s cykly v programu do…
8. 6. 2014   #190869

Dobrý den,

dělám doma semestrálku v Delphi a trošku si nevím rady, jakou část mám upravit. Má to být program, který vygeneruje do pole n souřadnic bodů v rovině (x,y), a potom má porovnat jejich vzdálenosti a najít tu nejmenší ze všech. Něco jsem už udělal, ale pořád mi to dělá pouze kombinaci posledního bodu s ostatníma - což je mi trochu divný. Jak je vidět v tom zdrojáku snažil jsem se tam nějak zavést dva cykly a myslel jsem že budou pracovat oba současně, ale pak se ukázalo, že to udělá jen inkrementaci pro i, jenže to j se pak načte asi jen jako největší i...promiňte, moc tomu ještě nerozumím, takže nevím, jestli je to možné. Došel jsem k tomu, když jsem si nechal vypisovat indexy, pro které to danou vzdálenost vypočítá, a ono to napíše vždy poslední, respektive ještě větší o jedničku, ale to tam mám chybu...poprosil bych o radu, třeba jen info jak udělat dva cykly kde jeden běží od začátku v tom prvním...(pozn. prvně jsem měl místo cyklu while prostě jen for i:=1 to n-1)

procedure NahodneGeneruj (var Pole:Tpole; sgpole : TStringGrid; n : integer);
var

Minimum, maximum : integer;
i,j : integer;
MinVzdalenost : real;
Vzdalenost : real;
PrvniIndex, DruhyIndex : integer;
a : integer;

begin

  Randomize;

  n:= StrToInt (frmHlavni.edtPocet.text);
  Minimum := StrToInt (frmHlavni.edtMIN.text);
  Maximum := StrToInt (frmHlavni.edtMAX.text);

  sgPole.ColCount := 2;
  sgPole.RowCount := n;

    for i := 1 to 2 do
       for j := 1 to n do

  Pole [i,j] := RoundTo (Minimum + Random* (Maximum-Minimum),-2);


    for i := 0 to n do
       for j := 0 to 2 do

               begin
                    sgPole.Cells[j,i] := FloatToStr(Pole[j+1,i+1]);
                    end;

begin

minVzdalenost := MaxInt;

i:=1;

while i<=(n-1) do

begin

    for j:= i+1 to n do

        vzdalenost := sqrt(sqr(Pole[1,i]-Pole[1,j])+sqr(Pole[2,i]-Pole[2,j]));

    if vzdalenost < minVzdalenost then


minVzdalenost := vzdalenost;

if vzdalenost = minVzdalenost then

PrvniIndex := i;
DruhyIndex := j;

i:=i+1 ;

end;

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý