Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизМассивы Найти похожие ветки
← →
Silica © (2006-02-02 16:51) [0]Дан такой код:
var i: integer;
a: array[1..11] of integer;
b,c,d,e: array[1..11] of byte;
str: string;
begin
for i:=0 to Memo1.Lines.Count-1 do
begin
a[i]:= strtoint(memo1.Lines[i]);
str:= memo1.Lines;
b[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines;
c[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines;
d[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines;
e[i+1]:= strtoint(memo1.Lines[i+1]);
end;
end;
На форме расположено поле МЕМО. В свойстве LINES введены четырехзначные числа. Каждое число с новой строки. Нужно организовать массив в MEMO, и каждое число разбить на отдельные цифры, например, 4673 разбить на 4, 6, 7, 3. Представленный выше код выдает ошибку. Не знаю в чем проблема. Помогите, пожалуйста.
← →
Desdechado © (2006-02-02 16:59) [1]> массив в MEMO
не понял, что это
> Представленный выше код выдает ошибку
какую?
а "массив" обязательно в том же МЕМО, или в другом?
← →
Гошик Кувшинов (2006-02-02 17:14) [2]В первый раз у тебя i равна 0 и a[i] обращается к несуществующему индексу
← →
Silica © (2006-02-02 17:34) [3]Desdechado , можно и в другом.
Гошик Кувшинов, поменяла на 1, все равно какая то ошибка.
← →
Гошик Кувшинов (2006-02-02 17:37) [4]Ну так напиши какая ошибка и на какой строке. А то прямо диагноз по фотографии получается.
← →
Плохиш © (2006-02-02 17:40) [5]
> Гошик Кувшинов (02.02.06 17:37) [4]
> Ну так напиши какая ошибка и на какой строке. А то прямо
> диагноз по фотографии получается.
А чем не диагноз ;-)
Ошибка несоответствия типов на первой же строке str:= memo1.Lines;
А так по коду совершенно не понятно, что нужно автору.
← →
Silica © (2006-02-02 19:22) [6]var i: integer;
a: array[1..11] of integer;
b,c,d,e: array[1..11] of byte;
str: string;
begin
for i:=1 to Memo1.Lines.Count-1 do
begin
a[i]:= strtoint(memo1.Lines[i]);
str:= memo1.Lines[i];
b[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines[i];
c[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines[i];
d[i+1]:= strtoint(str[i+1]);
str:= memo1.Lines[i];
e[i+1]:= strtoint(memo1.Lines[i+1]);
end;
end;
> А так по коду совершенно не понятно, что нужно автору.
я же написала после кода, что мне нужно.
приложение компилируется, но при нажатии кнопки, выполняющей этот код, выдается сообщение "... EConvertError...". При пошаговой компиляции он выдает ошибку при i:=4 в цикле.
Массив а - это массив в поле Мемо, состоящий из четырехзначных чисел, я перевожу строковый тип в тип integer.
Пример:
2564
1566
2452
...
Затем мне нужно каждое четырехзначное число разделить на 4 части (может символа?), например, 4859 на 4, 8, 5, 9. Чтобы потом каждое это число умножить на какое либо число, нужное мне. Пока у меня не получается поделить.
← →
Desdechado © (2006-02-02 19:54) [7]> четырехзначное число разделить на 4 части (может символа?)
именно символа
часть1 := Memo1.Lines[i][1];
часть2 := Memo1.Lines[i][2];
часть3 := Memo1.Lines[i][3];
часть4 := Memo1.Lines[i][4];
← →
Алхимик © (2006-02-02 19:57) [8]Пример:
2564
1566
2452
при i:=4, a[4]:= strtoint(memo1.Lines[4]);
в мемо 3 строки, а ты обращаешься к 4-й (нумерация с нуля)
← →
Silica © (2006-02-02 20:38) [9]Алхимик, в Мемо 11 строк по коду.
Desdechado, т.е. мне вообще не нужна строковая переменная.
А часть1, ... это массивы? К примеру,
b[i] := Memo1.Lines[i][1];
...
?
← →
Desdechado © (2006-02-02 21:37) [10]> т.е. мне вообще не нужна строковая переменная
Если у тебя все числа 4-значные, то можно завести 4 переменных типа Char или String, на каждую из цифр по "части"-переменной.
Если количество знаков в числах произвольное, то заведи массив длиной в максимально допустимое число знаков в твоем числе
← →
SergP © (2006-02-02 23:54) [11]
> b[i+1]:= strtoint(str[i+1]);
так не пройдет
Делай через copy, типа так:
var i,j: integer;
arrout: array[1..11,1..4] of Shortint;
begin
for i:=1 to Memo1.Lines.Count do
for j:=1 to 4 do
arrout[i,j]:=strtointdef(copy(memo1.lines.Strings[i],j,1),-1);
end;
← →
SergP © (2006-02-02 23:56) [12]
> for i:=1 to Memo1.Lines.Count do
вернее:
for i:=0 to Memo1.Lines.Count-1 do
← →
SergP © (2006-02-02 23:57) [13]
> arrout[i,j]:=strtointdef(copy(memo1.lines.Strings[i-1],j,1),-1);
вернее
← →
Almaz © (2006-02-03 01:03) [14]
> Не знаю в чем проблема.
Проблем тут много.
В первом приближении код можно периписать так:var i: integer;
a: array[1..11] of integer;
b,c,d,e: array[1..11] of byte;
begin
for i:=0 to Memo1.Lines.Count-1 do
begin
a[i+1]:= strtoint(memo1.Lines[i]);
b[i+1]:= strtoint(memo1.Lines[i][1]);
c[i+1]:= strtoint(memo1.Lines[i][2]);
d[i+1]:= strtoint(memo1.Lines[i][3]);
e[i+1]:= strtoint(memo1.Lines[i][4]);
end;
end;
Но останутся следующие недостатки кода - во первых, если число строк в Memo строго не равно 10, то если оно меньше, то массивы с индексом, большим числа строк будут заполнены мусором, а если больше, то получите ошибку Access Violation. Во-вторых, такой код вызовет исключение, если хотя бы в одной строке будет меньше 4-х цифр.
Удачи.
← →
Silica © (2006-02-03 17:35) [15]Спасибо всем, буду дальше доделывать. Надеюсь получиться. Дальше самое сложное начинается.
← →
Silica © (2006-02-12 11:48) [16]сначала каждая цифра числа умножается на определённый весовой коэффициент, например, 2,3,4,5,... Число 47325, следовательно, преобразуется в число
4*6 = 24
7*5 = 35
3*4 = 12
2*3 = 6
5*2 = 10
Результаты суммируются:
24+35+12+6+10=87
после того как я разделила каждое четырехзначное число на отдельные числа, мне нужно выполнить то, что написано выше.
Данным ниже кодом я пытаюсь это сделать
f[j] := e[i+1]*3;
str := memo3.Lines[j];
g[j] := d[i+1]*6;
str := memo3.Lines[j];
h[j] := c[i+1]*9;
str := memo3.Lines[j];
k[j] := b[i+1]*12;
str := memo3.Lines[j];
// сумма
x[i] := f[i] + g[i] + h[i] + k[i];
В первую очередь мне нужно вывести каждый массив(f, g...) в отдельное МЕМО. чисто для себя, чтобы проверить, правильно ли он считает.
Сумму вывести можно куда угодно.
Я пробовала через
Memo3.Lines[j] := inttostr(f[j]);
но ничего не получается.
Что я делаю не так?
← →
SergP © (2006-02-12 12:04) [17]
> Я пробовала через
> Memo3.Lines[j] := inttostr(f[j]);
> но ничего не получается.
Если в мемо кол-во строк не больше чем j - то не будет работать.
← →
Silica © (2006-02-12 16:20) [18]В мемо строк больше, чем j. Но при чем тут j. Все равно никак не получается мне вывести результат в мемо.
Чтоб было понятней:
for j := 0 to Memo3.Lines.Count-1 do
begin
...
j из цикла.
← →
vovnuke © (2006-02-12 16:31) [19]
> e[i+1]:= strtoint(memo1.Lines[i+1]);
> b,c,d,e: array[1..11] of byte;
← →
Silica © (2006-02-12 16:50) [20]Смотрите с 16 сообщения, выше не нужно. Там у меня уже все получилось.
← →
vovnuke © (2006-02-12 16:53) [21]Memo.Lines.Add(IntToStr(f[j]))
← →
vovnuke © (2006-02-12 17:05) [22]Memo.Invalidate.
← →
Плохиш © (2006-02-12 17:14) [23]
> Данным ниже кодом я пытаюсь это сделать
> f[j] := e[i+1]*3;
> str := memo3.Lines[j];
> g[j] := d[i+1]*6;
> str := memo3.Lines[j];
> h[j] := c[i+1]*9;
> str := memo3.Lines[j];
> k[j] := b[i+1]*12;
> str := memo3.Lines[j];
Строки, в которых производиться умножения понятны, но для чего после каждой из них производится присвоение неиспользуемой далее переменной str совершенно не понятно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c