Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2013, 22:21   #1
Sen1C
Новичок
Джуниор
 
Регистрация: 24.09.2013
Сообщений: 2
По умолчанию Массив и переход строк

Здравствуйте. Есть двумерный массив, как сделать так: если первая строка пуста, то заполнялась первая строка, а если она не пуста, то вторая, и т.д. 3-ю, 4-ю... используется string.
Пытался сделать через if..then почему то постоянно заполняется только 1 строка. Нужен сам код.
Код:
Const
n = 50;
m = 5;
var
i, j:integer;
maslistauto : array[1..n,1..m] of string;
strmarka, strnumberauto, strwhatauto, strmoney: string;
begin
strmarka := marka.text;
strnumberauto := numberauto.text;
strwhatauto := whatauto.text;
strmoney := money.text;
listauto.RowCount := n;
listauto.ColCount := m;
maslistauto[1,1]:='';
maslistauto[1,2]:='Марка';
maslistauto[1,3]:='Номер';
maslistauto[1,4]:='Что мыть?';
maslistauto[1,5]:='Цена';
if maslistauto[2,2]='' then
begin
for i:=1 to n do
for j:=1 to m do
  begin
    maslistauto[2,2]:=strmarka;
    maslistauto[2,3]:=strnumberauto;
    maslistauto[2,4]:=strwhatauto;
    maslistauto[2,5]:=strmoney;
    listauto.Cells[j-1, i-1] := (maslistauto[i,j]);
  end;
end
else
begin
for i:=1 to n do
for j:=1 to m do
  begin
    maslistauto[3,2]:=strmarka;
    maslistauto[3,3]:=strnumberauto;
    maslistauto[3,4]:=strwhatauto;
    maslistauto[3,5]:=strmoney;
    listauto.Cells[j-1, i-1] := (maslistauto[i,j]);
  end;
end;
Здесь я пытался хотябы 1-ю 2-ю строку. Спасибо

Последний раз редактировалось Stilet; 25.09.2013 в 10:09.
Sen1C вне форума Ответить с цитированием
Старый 24.09.2013, 22:34   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
i := 2;
while maslistauto[i, 2] <> '' do
  inc(i);
maslistauto[i,2] := strmarka;
maslistauto[i,3] := strnumberauto;
maslistauto[i,4] := strwhatauto;
maslistauto[i,5] := strmoney;
Примерно так.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.09.2013, 23:33   #3
Sen1C
Новичок
Джуниор
 
Регистрация: 24.09.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
i := 2;
while maslistauto[i, 2] <> '' do
  inc(i);
maslistauto[i,2] := strmarka;
maslistauto[i,3] := strnumberauto;
maslistauto[i,4] := strwhatauto;
maslistauto[i,5] := strmoney;
Примерно так.
Вставил код, вылетает ошибка: [Warning] Unit1.pas(60): Variable 'j' might not have been initialized.
Ругается на вывод.

Последний раз редактировалось Sen1C; 27.09.2013 в 23:43.
Sen1C вне форума Ответить с цитированием
Старый 27.09.2013, 23:34   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Не путайте предупреждение (warning) и ошибку (error). Тем более, это всего лишь пример. Уберите из раздела var переменную j, если не используете её, или присвойте ей какое-либо начальное значение перед использованием.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.09.2013 в 23:36.
BDA вне форума Ответить с цитированием
Старый 28.09.2013, 16:01   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Variable 'j' might not have been initialized.
Это предупреждение - переменная j не инициализирована. В Делфи переменной при объявлении просто выделяется место в памяти. При этом всем пофигу что там находилось до этого. Поэтому в j сразу после создания может находится любое число и очень высока вероятность, что при следующем запуске число будет другим. Программер же обычно считает, что число там будет 0. И даже когда он знает, что Делфи ничего не инициализирует, он все равно часто парится и от этого у него при тестовом запуске программы делается длинное лицо. И хотя в данном случае это предупреждение (не ошибка!) не критично, просто возьмите себе за привычку инициализировать свои переменные перед использованием (я это обычно делаю сразу после секции var).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.09.2013, 16:43   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
В Делфи переменной при объявлении просто выделяется место в памяти
Справедливо только для простых локальных переменных.
northener вне форума Ответить с цитированием
Старый 28.09.2013, 18:43   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Справедливо только для простых локальных переменных.
А для каких несправедливо?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.09.2013, 19:09   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
А для каких несправедливо?
Для глобальных переменных, полей форм, любых переменных имеющих тип с контролируемым временем жизни.
northener вне форума Ответить с цитированием
Старый 29.09.2013, 21:22   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну глобальные переменные не существуют для меня .
Поля формы принадлежат форме и она отвечает за их поведение, так что пример не удачный.
Цитата:
любых переменных имеющих тип с контролируемым временем жизни
Согласен, но для всяческих массивов и строк я искусственно выделяю длину только перед тем как заполнить. Фактически для меня это одна операция. То есть к чему я все это веду. Нужно лично для себя выработать определенную методику написания программы. Тогда такие мелочи не будут отвлекать мозг (или кость у кого как) от написания программы и употребления кофе.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.09.2013, 22:00   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Нужно лично для себя выработать определенную методику написания программы.
Нет возражений.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать массив строк в массив чисел на C#? orfos Помощь студентам 4 03.10.2014 15:56
Написать алгоритм, который реализует jagged массив (рваный массив с различной длиной строк), используя список списков (Pascal ABC) бабуся Помощь студентам 0 29.04.2013 00:07
Массив строк kura007 Общие вопросы C/C++ 4 27.04.2013 21:22
Массив строк L_Killer Помощь студентам 2 30.05.2010 01:58