Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
13 / 13 / 11
Регистрация: 28.09.2013
Сообщений: 364
1

Размерность массива

07.11.2014, 23:15. Показов 1115. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Создаю массив с заданной размерностью:
Delphi
1
  rec: array[1..100, 1..100] of string;
Далее считываю в него данные из ini файла:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  //Если файла нету, то его создаем, в результат записывам 0
  if not(FileExists(sPath + '\options.ini')) then
  begin
    GetDir(0,sPath);
    IniFile:=TIniFile.Create(sPath + '\options.ini');
    for i:=1 to 10 do
      begin
        IniFile.WriteString(IntToStr(i), 'Name', '-');
        IniFile.WriteString(IntToStr(i), 'Value', '0');
      end;
  end;
 
  //Заносим в массив все значения, чтобы в дальнейшем работать с ним, а не с файлом
  for i:=1 to 10 do
    begin
      rec[i, 1]:=IniFile.ReadString(IntToStr(i), 'Name', '10');
      rec[i, 2]:= IniFile.ReadString(IntToStr(i), 'Value', '10');
    end;
Но когда пытаюсь выполнить сортировку возникает ошибка:
Delphi
1
2
3
4
5
var
  state: Boolean;
  nick: string;
  i, n, j, top_rec: Integer;
  tmp_name, tmp_value: string;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      n := High(rec);
      for i:=n-1 downto 1 do
        for j:=1 to i do
          if StrToInt(rec[i, 2]) > StrToInt(rec[i+1, 2]) then
            begin
              tmp_value:=rec[i, 2]; //Тут ругается...
              tmp_name:=rec[i, 1];
 
              rec[i, 2] := rec[i+1, 2];
              rec[i, 1] := rec[i+1, 1];
 
              rec[i+1, 2] := tmp_value;
              rec[i+1, 1] := tmp_name;
            end;
Когда дебажил, то обнаружил, что в переменной n содержится значение 100, а хотя в ini файле всего десять значений.
В чем я ошибся при составлении решения задачи?
Вот сама ошибка:
Миниатюры
Размерность массива  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2014, 23:15
Ответы с готовыми решениями:

ввести с клавиатуры размерность массива
нужно ввести с клавиатуры размерность массива на делфи для одномерного массив выводится в...

как указать размерность массива в делфи7
нужно ввести с клавиатуры размерность массива на делфи для одномерного массив выводится в...

Изменить размерность массива в процедуре, переданного в виде параметра.
Здравствуйте, ВСЕ. Есть процедура procedure Split(var arrResult: array of string); При таком...

Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200, а диапазон
Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200,...

4
13 / 13 / 11
Регистрация: 28.09.2013
Сообщений: 364
07.11.2014, 23:37  [ТС] 2
Скорее всего ошибка в условие, когда конвертируется строка в число, т.к. в массиве находится 100 элементов(большинство пустые). Пробовал усовершенствовать код таким образом:
Delphi
1
if (TryStrToInt(rec[i, 2],top_rec)) and (TryStrToInt(rec[i+1, 2],top_rec2))  then
Но данное условие неразу не выдало TRUE
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
08.11.2014, 02:31 3
Цитата Сообщение от Taxip Посмотреть сообщение
IniFile.WriteString(IntToStr(i), 'Name', '-');
Что за бред ты тут записываешь в ini-файл?
0
61 / 51 / 25
Регистрация: 17.12.2013
Сообщений: 242
08.11.2014, 05:10 4
Taxip, Все просто!
Ты создаешь массив с заранее заданным размером. в этом случае
Цитата Сообщение от Taxip Посмотреть сообщение
High(rec)
выдает тебе значение 100, так как это и есть последняя строка твоего массива. В массиве заполнены значениями строки от 1 до 10, строки от 11 до 100 остаются пустыми, т.е. равны ''.
Вот тут
Цитата Сообщение от Taxip Посмотреть сообщение
if StrToInt(rec[i, 2]) > StrToInt(rec[i+1, 2]) then
ты пытаешься преобразовать строку в Integer для сравнения. Вот тебе и ошибка: '' is not valid integer value.
0
13 / 13 / 11
Регистрация: 28.09.2013
Сообщений: 364
08.11.2014, 13:20  [ТС] 5
KMSNasgool, Использовал динамические массивы, и все получилось)
0
08.11.2014, 13:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2014, 13:20
Помогаю со студенческими работами здесь

Размерность в stringgrid
Помогите плиз при одинаковой размерности все нормально работает, а когда строк больше чем столбцов...

размерность стринггрида вводится с клавиатуры
нужно сделать программу в которой размерность стринггрида ( количество строк и столбцов) вводится...

Как увеличить размерность матрицы
есть массив draw : array of array of integer; как мне увеличить его размер? SetLength(draw,...

Возможно ли задавать размерность матрицы непосредственно из программы?
Возможно задавать размерность матрицы непосредственно из программы если да то подскажите плиз очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru