Witam,
próbuję użyć tablicy w pętli (for), ale cały czas pokazuje mi błąd na zmiennej I i nie wiem czy po prostu ja robię coś źle czy nie można tak w delphi?
var I : Integer;
for I := 1 to 10 do
tablica[I]:=I;
Bardzo proszę o pomoc.
Witam,
próbuję użyć tablicy w pętli (for), ale cały czas pokazuje mi błąd na zmiennej I i nie wiem czy po prostu ja robię coś źle czy nie można tak w delphi?
var I : Integer;
for I := 1 to 10 do
tablica[I]:=I;
Bardzo proszę o pomoc.
JAKI BŁĄD???
Jak najbardziej można tak wykorzystać pętlę for
, żeby zmienna sterująca była jednocześnie indeksem tablicy.
Natomiast odnośnie Twojego problemu - podaj odpowiedź na trzy poniższe pytania, bo na razie ciężko coś więcej powiedzieć:
1) pokaz, w jaki sposób została zadeklarowana tablica
2) napisz, jaki błąd się pojawia. Myślę, że mając go będziemy mogli coś więcej powiedzieć. Może on wynikać z wielu rzeczy - może tablica nie jest typu integer, a może ma inny rozmiar i w pętli odwołujesz się do elementów poza jej zakresem
oraz
3) czy ten błąd pojawia się podczas kompilacji, czy dopiero po uruchomieniu?
Dodałem w załączniku
po pierwsze - tablicę masz zadeklarowaną jako array[0..9] of string
. Oznacza to, że składa się z 10 elementów, ale są one typu string
czyli tekstowego. Poza tym numeracja zaczyna się od zera, a kończy na 9.
Ty natomiast starasz się po pierwsze pisać do indeksów od 1 do 10, co oznacza, że ostatni indeks do którego się odwołujesz zwyczajnie nie istnieje, a po drugie - chcesz do tablicy tekstowej zapisać wartości liczbowe.
Najpierw - uporządkuj te indeksy i zrób tak, żeby deklaracja tablicy pokrywała się z pętlą - obecnie w jednym miejscu masz 0-9, a w drugim 1-10.
A po drugie - albo zmień typ tablicy na integer, albo skorzystaj z funkcji, która przerobi liczbę na łańcuch (np. inttostr
) i dopiero po takiej konwersji zapisz ją do tablicy.
Tak w ogóle to widzę, że pętla for
w pierwszym poście oraz na załączonych zrzutach ekranu to są inne pętle, w związku z czym ciężko mi teraz dać konkretną poradę, bo pierwszy post oraz ostatni zawierają różne treści i nie wiem, do której mam się odnosić i poprawiać. Napisz może co chcesz osiągnąć i co ten program ma robić, to będzie łatwiej Ci pomóc. Zwłaszcza, że widzę parę innych błędów/problemów w Twoim kodzie, ale o tym będzie trochę późnej ;)
I ostatnia prośba - jakbyś mógł kod zamieszczać w treści posta a nie jako obrazki - będzie czytelniej.
Program ma podliczać punktacje formuły 1. Czyli za 1 miejsce 20 punktów i tak dalej. Zrobiłem 10 editów, które odpowiadają drużyną (jest ich 10), użyłem fora dlatego, że z założenia maja być tylko 5 okrążeń i na końcu if który ma sprawdzać czy zmienna przypisana do edita jest równa jeden, dwa itd. do 10ciu. I stoję na etapie takim:
P.S Skrypt sie zmienił bo w między czasie go modyfikowałem
unit unit6;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit10: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
var
Tablica : array[0..9] of string;
var a, b, c, d, e, f, g, h, i, j :String;
implementation
{$R *.lfm}
procedure TForm1.Button1Click(Sender: TObject);
var n,o,s,r,p,w,u,x,y,z:real;
var m : integer;
begin
Tablica[0] := a;
Tablica[1] := b;
Tablica[2] := c;
Tablica[3] := d;
Tablica[4] := e;
Tablica[5] := f;
Tablica[6] := g;
Tablica[7] := h;
Tablica[8] := i;
Tablica[9] := j;
n:=StrToint(Edit1.text);
o:=StrToint(Edit2.text);
s:=StrToint(Edit3.text);
r:=StrToint(Edit4.text);
p:=StrToint(Edit5.text);
w:=StrToint(Edit6.text);
u:=StrToint(Edit7.text);
x:=StrToint(Edit8.text);
y:=StrToint(Edit9.text);
z:=StrToint(Edit10.text);
for m:= 1 to 5 do
if n == 1 Tablica[0]:=20+a;
if n == 2 Tablica[0]:=18+a;
end;
end.
Tablica[0] := a;
Tablica[1] := b;
Tablica[2] := c;
Tablica[3] := d;
Tablica[4] := e;
Tablica[5] := f;
Tablica[6] := g;
Tablica[7] := h;
Tablica[8] := i;
Tablica[9] := j;
Przypisujesz do tablicy wartości tych zmiennych, a nawet nie nadałeś im początkowej wartości. Jako że zmienne od a
do j
są globalne, to ich wartości są inicjalizowane pustymi ciągami znaków. Więc do każdej komórki tablicy i tak podajesz puste wartości.
n:=StrToint(Edit1.text);
o:=StrToint(Edit2.text);
s:=StrToint(Edit3.text);
r:=StrToint(Edit4.text);
p:=StrToint(Edit5.text);
w:=StrToint(Edit6.text);
u:=StrToint(Edit7.text);
x:=StrToint(Edit8.text);
y:=StrToint(Edit9.text);
z:=StrToint(Edit10.text);
Zmienne od n
do z
są typu Real
, czyli zmiennoprzecinkowego, a Ty próbujesz do nich wpisać liczby całkowite. Zamiast StrToInt
użyj StrToFloat
.
damianmajor987 napisał(a):
P.S Skrypt sie zmienił bo w między czasie go modyfikowałem
To nie jest skrypt – te pisze się w językach skryptowych, do których Delphi się nie zalicza.
Dziękuję bardzo za wszelkiej maści wskazówki mój błąd odnośnie skryptu wziął się stąd, że przygodę z programowaniem zacząłem z językami skryptowymi i dlatego ciężko mi jest się przestawić zwłaszcza na deklarowanie typu zmiennej. Jesteście mi w stanie powiedzieć jeszcze jak zrobić w if'ie, że jeżeli coś = coś to zrób tamto, bo dwa równa się nie działają ?
Bo w przeciwieństwie do innych języków, dialekty Pascala wykorzystują operator =
jak pan bug przykazał do porównania operandów, a nie do przypisania.
if cos = cos then
zrob_cos;
Zacznij może od jakiegoś kursu, bo masz poważne braki z zakresu absolutnych podstaw. W razie czego tutaj jest dokumentacja, w której znajdziesz wszystko czego potrzebujesz.
No i pytanie - czy teraz już wiesz, jak osiągnąć to, co chciałeś, czy jeszcze nadal masz problem?
Wczoraj poszedłem spać, ale widzę, że temat ładnie pociągnął dalej @furious programming. Jakby co to śmiało pisz :)