Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.05 c
2-1139157802
Вячеслав Бессонов
2006-02-05 19:43
2006.02.26
Сохранение


2-1139159387
Apollon_604
2006-02-05 20:09
2006.02.26
Hide-Show


8-1126982161
ArtemESC
2005-09-17 22:36
2006.02.26
Как реализовать освящение


6-1131999953
XRed
2005-11-14 23:25
2006.02.26
Интернет. Процесс передачи данных.


2-1139691033
Norfolk
2006-02-11 23:50
2006.02.26
Собственный тип данных в отдельный модуль





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский