Potrebujem pomoc

Programovacie jazyky, rady, poradňa...
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Potrebujem pomoc

Príspevok od používateľa silvia87 »

prosim pomozte mi niekto s tymto algoritmom:

V kartezianskom suradnom systeme je danych N dvojic bodov Bi(xi,yi,zi), A(xi,yi,zi). Kazda dvojica definuje vektor. Zostavte algoritmus na najdenie dvojice bodov, ktorej vektor ma najmensi priemet do roviny XY.

som z toho fakt zufala uz! :cry:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

dokedy to potrebuješ?
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

no tak do piatku by to bolo najlepsie
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

jasné.. pomôžem..
bude to v delphi, dám ti zdrojáky aj exe.. teraz idem jesť, a potom sa do toho pustím :wink:
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

jeeeej dakujem kraasne... si ma zachranil :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

snažil som sa ti to aj okomentovať, treba si pozrieť zdrojáky.. Snáď je to dobre... Ak som to aj zle rátal, tak ti snáď pomôže aspoň postup.. nechaj sa inšpirovať
Prílohy
vektor.rar
zkompilovaný súbor (hotové exéčko :D )
(223.81 KiB) 79 stiahnutí
zdrojáky.rar
plno písmenok
(234.72 KiB) 87 stiahnutí
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

:shock: waw..no je to super...veeeelmi pekne dakujem len neviem ci mi to profak uveri..je to dost zlozite-aspon to tak vypada. nevedel by si to spravit jednoduchsie alebo len napisat vseobecny algoritmus? asi uz chcem od teba vela toho ale mne tie pismenka nic nevravia :oops:
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

aky algoritmus? prechadzat polom snad vies. nepotrebujes urobit nic ine iba vypocitat priemet vektora do roviny xy. nepouzijes nic ine iba pytagorovu vetu.
velkost vektora je prepona a posunutie na osi z je jedna odvesna. toto dosadis do pytagorovej vety, vypocitas druhu odvesnu a to je priemet vektora do roviny XY
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

mastermind napísal:aky algoritmus? prechadzat polom snad vies. nepotrebujes urobit nic ine iba vypocitat priemet vektora do roviny xy. nepouzijes nic ine iba pytagorovu vetu.
velkost vektora je prepona a posunutie na osi z je jedna odvesna. toto dosadis do pytagorovej vety, vypocitas druhu odvesnu a to je priemet vektora do roviny XY
jasné, toto som potreboval :D mám tam chybu, poobede to prerobím a hodím sem hotové riešenie, plus nejakú fakt okresanú verziu pre silviu :)

//edit: ale houby, nemám tam chybu.. skúšal som to pre rôzne hodnoty. Posunutie na osi z môžem odignorovať, lebo na zobrazenie xy sa neprenesie.. aj ak si to dosadíš do svojho vzorca, tak to z sa ti stratí pretože pri počítaní dlžky vektora ho prirátaš, ale v pytagorovej vete vystupuje ako odvesna tak to zase odrátaš

a tu je to maximálne okresané riešenie scvrknuté na tri procedúry. Neoveruje sa vstup, predpokladá sa celočíselný...

Kód: Vybrať všetko

unit vektory;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label7: TLabel;
    ListBox2: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
  private
    { Private declarations }
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var riadok1,riadok2:string;
prepona,odvesna:real;
begin
 riadok1:='A: '+Edit1.Text+','+Edit2.Text+','+Edit3.Text+'   B: '+Edit4.Text+','+Edit5.Text+','+Edit6.Text;   //pripravím si jeden vstup s hodnotami pre prvý listbox
 prepona:=sqrt((sqr (StrToInt(Edit4.Text)-StrToInt(Edit1.Text)))+(sqr(StrToInt(Edit5.Text)-StrToInt(Edit2.Text)))+(sqr(StrToInt(Edit6.Text)-StrToInt(Edit3.Text))));  //veľkosť vektora
 odvesna:=StrToFloat(Edit6.Text)-StrToFloat(Edit3.Text);        //posunutie na z-osi  (viď mastermindov post na fore)
 riadok2:=FloatToStr(sqrt(sqr(prepona)-sqr(odvesna)));   //a výsledok
 Listbox1.Items.Add(riadok1);  // do listboxu si vložím prvý riadok pre prehľadnosť a evidovanie predošlích vstupov
 Listbox2.Items.Add(riadok2);  //do druhého listboxu (skrytého) si vložím výsledok
 end;




//*****************hľadanie najmenšieho zobrazenia****************
procedure TForm1.Button2Click(Sender: TObject);
var I:Integer;
minimum:real;
begin      //skúsim či vôbec máme nejaké hodnoty:
If Listbox1.Items.Count=0 then showmessage('Nie je definovaný žiaden vektor') else begin
minimum:=StrToFloat(Listbox2.Items[0]);   //ak áno, do minima vložím prvú hodnotu zo skrytého listboxu
for I:=0 to Listbox2.Items.Count-1 do     //prejdem všetkými jeho prvkami
  if StrToFloat(Listbox2.Items[I])<=minimum then begin  //a porovnávam s minimom
     minimum:=StrToFloat(Listbox2.Items[I]);     //ak nájdem menší alebo rovný, tak ho nahradím
     Listbox1.ItemIndex:=I;     //a nastavím sa na pozíciu kde sa nachádzal
     end;
Label7.Caption:='Najmenší priemet v rovine má označený vektor'+chr(13)+'Jeho hodnota je: '+FloatToStr(minimum);  //vypíšem jeho hodnotu, a stále ostanem nastavený na jeho pozícii
end;
end;


//*******************mazanie záznamov****************
procedure TForm1.ListBox1DblClick(Sender: TObject);
var index:integer;
begin
index:=Listbox1.ItemIndex;   //zistím si na ktorom sa nachádzam
Listbox1.Items.Delete(index);  //a zmažem z jedného
Listbox2.Items.Delete(index);  //aj druhého listboxu
end;



//************************ AMEN ***************************
end.
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

dakujem krasne! uz je to lepsie :wink: ale aj tak niektorym veciam nerozumiem...ale nevadi to sa spravi...tak este raz dakujem ..si ma zachranil
:aasmile1:
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

nuz ja som to neupravoval, ja som napisal ako by sa to malo podla pytagorovej vety pocitat.. ano z vypadne.
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

no ja som to v podstate mala spravit len zapisom a vyvojovy diagram nakreslit...z Pascalu nieco viem ale Delphi vidim prvykrat,takze niektore veci netusim co su aj ked je to podobne ako pascal.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

to si mala napísať hneď v akom jazyku to potrebuješ.. mám ti to prepísať do pascalu? alebo chceš vývoják? hmmm?

PS: vstupy budú zo súboru, alebo z klávesnice?

nabudúce kto bude chcieť pomôcť a nenapíše v akom jazyku, tak tému rovno zamknem. :)
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

prepac ale to som este nevedela v com to mam spravit...som sa to dozvedela len vcera ze to ma byt v Pascale a aj diagram tam ma byt. :cry:
a tie vstupy asi z klavesnice
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

zdroják ti prepíšem neskôr, teraz nemám čas.. (možno v noci, alebo zajtra)

//edit: skús takto nejak (otestujte to niekto, ja nemám ako, je to z hlavy)

Kód: Vybrať všetko

program vektor;
var A:array[1..3] of real;   //pole kde si ulozim hodnoty
vyber:char;           //vyber či chceme zadat dalsi
AX,AY,AZ,BX,BY,BZ:integer;      //jednotlive hodnoty
I:integer;   //na riadenie cyklu
MIN:real;    //najmensia hodnota
P:integer;   //pocet zadanych prvkov
begin
P:=0;                     //počet uložených vektorov
repeat begin
Write ('Zadaj hodnotu Xa: ');
read (AX);
Write ('Zadaj hodnotu Ya: ');
read (AY);
Write ('Zadaj hodnotu Za: ');
read (AZ);
Write ('Zadaj hodnotu Xb: ');
read (BX);
Write ('Zadaj hodnotu Yb: ');
read (BY);
Write ('Zadaj hodnotu Zb: ');
read (BZ);
P:=P+1;                 //zvýšim počet zadaných vektorov
A[P]:=sqrt((sqr(BX-AX))+(sqr(BY-AY)));   //uložím si hodnotu priemetu
Write('Zadat novy vektor? <A/N> ');     //spytame sa ci chce zadat nove hodnoty
read(vyber);                            //nacitam stlacenu klavesu
end until vyber='N';                        //ak sa rovná písmenu N tak skončím načítavať

min:=A[1];   //do minima dám prvú hodnotu
For I:=1 TO P do if A[I]<MIN then MIN:=A[I];  //prehladám pole a najdem minimum
writeln('Najmensie zobrazenie je: ',MIN);                                  //vypíšem ho
readln
end.
Prílohy
Bez názvu.GIF
(7.78 KiB) 222 stiahnutí
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

no ten zaciatok je dobry ale na konci mi to min nenajde. a aj ked dam vo vybere N tak stale chce hodnoty vektora. tam bude daka chyba na tom konci...ale inak je to super :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tak to sprav s pevným počtom opakovaní takto (potom sa ti zmení aj vývoják)

Kód: Vybrať všetko

program vektor;
var A:array[1..10] of real;   //pole kde si ulozim hodnoty, najviac však 10 vektorov
AX,AY,AZ,BX,BY,BZ:integer;      //jednotlive hodnoty
I:integer;   //na riadenie cyklu
MIN:real;    //najmensia hodnota
P:integer;   //pocet zadanych prvkov
poradie:integer;  //poradie najmenšieho vektora
begin
Write('Pocet vektorov: ');
read(P);      //načítam koľko vektorov chce zadať
For I:=1 to P do begin
writeln('===================='); //vykreslím oddelovač pre prehladnosť
Write ('Zadaj hodnotu Xa: ');
read (AX);
Write ('Zadaj hodnotu Ya: ');
read (AY);
Write ('Zadaj hodnotu Za: ');
read (AZ);
Write ('Zadaj hodnotu Xb: ');
read (BX);
Write ('Zadaj hodnotu Yb: ');
read (BY);
Write ('Zadaj hodnotu Zb: ');
read (BZ);
A[I]:=sqrt((sqr(BX-AX))+(sqr(BY-AY)));   //uložím si hodnotu priemetu
end;
min:=A[1];   //do minima dám prvú hodnotu
poradie:=1;  //a jeho pozícia je 1
For I:=1 TO P do if A[I]<MIN then begin    //prejdem celým polom a porovnavam veľkosti
   MIN:=A[I];  //a najdene minimum si uložim
   poradie:=I; //aj s jeho poziciou
   end;
writeln;  //voľný riadok pre prehľadnosť
writeln('Namensi priemet ma ',poradie,'. vektor a jeho velkost je: ',MIN:0:5);                                  //vypíšem ho
readln (I)
end.
Prílohy
Project2.rar
ukážka hotového programu
(21.23 KiB) 71 stiahnutí
vyvojak.GIF
(7.68 KiB) 218 stiahnutí
silvia87
Novice
Novice
Príspevky: 9
Registrovaný: 01 dec 2006, 18:11
Bydlisko: Zvolen

Príspevok od používateľa silvia87 »

super..dakujem krasne..no uvidime co mi na profak povie...
este raz dik! :smt006
Napísať odpoveď