Delphi - rysowanie prostokąta

0

Witam,

Mam pewne zadanie, nie za bardzo umiem sobie z nim poradzić. Byłbym bardzo wdzięczny za pomoc.

Zad.
Opracowac aplikacje, która pozwala wprowadzac wymiary nie wiecej niz 20 prostokatów.
Wymiary prostokatów podawane sa w pikselach. Aplikacja powinna wyznaczac i wyswietlac
(z wykorzystaniem komponentu Shape) prostokat o wymiarach srednich (tj. sredniej
szerokosci i długosci).
Rozbuduj aplikacje o mozliwosc wyswietlania prostokata posiadajacego najwieksza
szerokosc oraz prostokata o najmniejszej długosci.

0

odwalenie zadania za ciebie - 100zł
pomoc - z czym konkretnie masz problem?

0

Jasne. Programowanie w Delphi jest mi przydatne tylko na potrzeby uczelniane, to też nie kopiowałem tego co mam, aby nikogo nie zmylić. Ale proszę:

public
N: integer;
x,y: array[1..20] of real;
{określenie nie więcej niż 20 prostokątów}

procedure TForm1.Button1Click(Sender: TObject);

var pom, pom1: string;
s, s1: real;
i: integer;
begin
i:=0;
repeat
pom:=StringGrid1.Cells[0,i];
pom1:=StringGrid2.Cells[0,i];
if (pom <> ) and (pom1 <> ) then
begin
i:=i+1;
x[i]:=StrToFloat(pom);
y[i]:=StrToFloat(pom1);
end;

until (pom=) or (pom1=) or (I=StringGrid1.RowCount);
N:=i;

s:=0;
s1:=0;

for i:=1 to N do
begin
s:=s+x[i];
s1:=s1+y[i];
Shape1.Height:=Shape1.Height + pom;
Shape1.Width:=Shape1.Width + pom1;
end;
end;

Program w ogóle nie działa tak jak chciałbym. Drugiej części zadania nawet nie ruszyłem.

0
Piotro napisał(a)

x,y: array[1..20] of real;

Źle do tego podchodzisz. Zamiast dwóch tablic, stwórz jedną tablicę rekordów:

rects:array[1..20] of record x,y:real end;

Shape1.Height:=Shape1.Height + pom;
Program w ogóle nie działa tak jak chciałbym. Drugiej części zadania nawet nie ruszyłem.

A jak chciałbyś? Bo w tej chwili nie liczysz średniego prostokąta, tylko sumujesz wymiary wszystkich...

0

Wiesz co, tak miałem w jednym z wcześniejszych przykładów i chciałbym się tego trzymać (chyba iż twierdzisz, że na pewno jest to błędne). Zresztą podmieniając na Twój kod z tablicą, nie działa;p

Shape1.Height:=Shape1.Height + pom;

No właśnie nic nie robi, bo przy takim zapisie jest błąd...

0
Piotro napisał(a)

Wiesz co, tak miałem w jednym z wcześniejszych przykładów i chciałbym się tego trzymać (chyba iż twierdzisz, że na pewno jest to błędne).

Nie jest błędne, ale uczenie się złego stylu nie jest zalecane.

Zresztą podmieniając na Twój kod z tablicą, nie działa;p

Ech... oczywiście musisz zmienić sposób odwoływania się:

rects[i].x:=
rects[i].y:=
Shape1.Height:=Shape1.Height + pom;

No właśnie nic nie robi, bo przy takim zapisie jest błąd...

Jaki niby błąd?

0

Nie kompiluje całości. Właśnie w tej

Shape1.Height:=Shape1.Height + pom;

linii. A zamieniając "+ pom" na np. "+ 1" jest już w porządku, choć sam program debilnie chodzi. Wiem, że średnia powinna być Shape1.Height:=Shape1.Height + (pom/N);

 oraz <code class="delphi">Shape1.Width:=Shape1.Width + pom1;

, ale narazie nic mi to nie daje.

0

a jakiego typu jest pom i jak wg ciebie dodaje się liczby i napisy?
BTW odpowiedź NIE DZIAŁA to nie jest odpowiedź!!!! Komunikatu przepisać nie potrafisz?

0

Człowieku, bo komunikat jest taki jak napisałem u góry "Could not compile used unit 'Unit1.pas' ". Cały kod jest wcześniej: pom i pom1 jako string. Nie wiem, pewnie jeszcze trzeba coś przekonwertować. Gdybym wiedział jak, nie zwracałbym się do Was o pomoc.

0

nie człowieku - komunikat jest mniej więcej taki: "Incompatible type string and integer"
a rozwiązuje się go takale jak widać jesteś za tępy lub leniwy - które jest prawdziwe sam sobie wybierz.

BTW jak programowanie masz na uczelni i ci to nie odpowiada to trzeba było wybrać inny kierunek.

Kolejny biedny, zarobiony i niemający na nic czasu studencik...

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