Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск ошибки, Немогу разобраться в построение программ 
:(
    Опции темы
oksancik
  Дата 12.1.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.12.2004

Репутация: нет
Всего: нет



Немогу разобраться в чём возникает ошибка в данной программе. Программа должна переворачивать массив, используя для ввода и вывода ListBox. Если вы знаети как её написать по другому, то пожалуйста,буду очень благодарна.

Код

procedure TForm1.AddClick(Sender: TObject);
begin
ListBox1.Items.Add(edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var Mas : array of Integer;
   i,temp:integer;
begin
 SetLength(Mas, ListBox1.Items.Count);
  for i := 0 to Length(Mas) do
   begin
   temp:=mas[i];
   mas[i]:=mas[length(mas)-i+1];
   mas[length(mas)-i+1]:=temp;
   ListBox2.Items.Add(ListBox1.Items[i]);
   end;
 end;
end.


PM MAIL   Вверх
Rennigth
Дата 12.1.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



это?
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Add(edit1.Text);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
 for i := 0 to ListBox1.Items.Count - 1 do
   ListBox2.Items[i] := ListBox1.Items[(ListBox1.Items.Count -1) - i];
end;

Добавлено @ 12:19
а ошибка, самое первое что заметил это цикл до listbox.items.count а надо до count - 1


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
oksancik
Дата 12.1.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.12.2004

Репутация: нет
Всего: нет



Нет меня интересует именно переворот...(я также в прошлый раз делала, так у меня непринемают).В ответи должно получятся что-то вроде 1234=4321 (в строчку, а не с столбец как мы все делаем).

Это сообщение отредактировал(а) oksancik - 12.1.2005, 12:46
PM MAIL   Вверх
<Spawn>
Дата 12.1.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



1) Не понятно зачем нужно использовать временный массив с переменной, если используется 2 TListBox(смотри пример Rennigth)
2)Не указана возникшая ошибка, но судя по коду(Как уже указал Rennigth), тут присутствует Access Violetion, то есть выход за границу массива(Необходимо использовать в качестве верхнего предела цикла значение Length(Mas) - 1)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 12.1.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



<Spawn> А может проще High(mas)? smile
PM   Вверх
<Spawn>
Дата 12.1.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата
В ответи должно получятся что-то вроде 1234=4321 (в строчку, а не с столбец как мы все делаем).
Тогда есть следущий вопрос - какие значения могут использоваться в качестве элементов строк TListBox-а ? Cудя по этому примеру от 0 до 9. В таком случае все просто:

Код

uses  ..., StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(Format('%s = %s', [StringReplace(ListBox1.Items.Text, #13#10, '', [rfReplaceAll]),
  AnsiReverseString(StringReplace(ListBox1.Items.Text, #13#10, '', [rfReplaceAll]))]));
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 12.1.2005, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Ошибка - "Invalid pointer operation"
Возникает на втором шаге цикла
При ListBox2...
Добавлено @ 13:03
В общем случае может подойти и это...
PM   Вверх
Rennigth
Дата 12.1.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



непонял, тебе нужно чтобы строчки остались на местах, а их содержимое перевернулось?
Код


procedure TForm1.Button1Click(Sender: TObject);
var
 i, j : integer;
 st : string;
begin
 for i := 0 to ListBox1.Items.Count - 1 do
 begin
   setlength(st, Length(ListBox1.Items[i]));
   for j := 1 to Length(ListBox1.Items[i]) do
     st[j] := ListBox1.Items[i][Length(ListBox1.Items[i])-j + 1];
   ListBox2.Items.Add(st);
 end;
end;



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
<Spawn>
Дата 12.1.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(Pakshin @ 12.1.2005, 14:59)
<Spawn> А может проще High(mas)? smile

Дело вкусаsmile Я, конечно, всегда использую High, но для человека, который мало что в этом смыслит, я думаю, было понятнее написать - 1, так как нужно понять, что индексация массивов начинается с 0, а Length() возвращает количество элементов массива, а не максимальный индекс.

Это сообщение отредактировал(а) <Spawn> - 12.1.2005, 13:07


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Rennigth
Дата 12.1.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



smile <Spawn>, Pakshin A. S. обновится забыл (здесь целая дискусия уже)

Добавлено @ 13:07
непонял, тебе нужно чтобы строчки остались на местах, а их содержимое перевернулось?
Код


procedure TForm1.Button1Click(Sender: TObject);
var
 i, j : integer;
 st : string;
begin
 for i := 0 to ListBox1.Items.Count - 1 do
 begin
   setlength(st, Length(ListBox1.Items[i]));
   for j := 1 to Length(ListBox1.Items[i]) do
   begin
     st[j] := ListBox1.Items[i][Length(ListBox1.Items[i])-j + 1];
   end;
   ListBox2.Items.Add(st);
 end;
end;



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 12.1.2005, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Вообще... надо получше задачу поставить... smile
Меня смущает "в строчку"...
куда выводить нужно?
PM   Вверх
<Spawn>
Дата 12.1.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата(Pakshin @ 12.1.2005, 15:10)
Вообще... надо получше задачу поставить... smile
Меня смущает "в строчку"...
куда выводить нужно?

В строчку это значит в строчкуsmile То есть без #13#10 smile Пример я привел выше.

По другому можно было сделать так(Если нужно все завязывать на TListBox):

Код

procedure TForm1.Button2Click(Sender: TObject);
var
 i: integer;
begin
 ListBox2.Items.Clear;
 ListBox2.Items.Add('');
 for i := ListBox1.Items.Count - 1 downto 0 do
   ListBox2.Items[0] := ListBox2.Items[0] + ListBox1.Items[i];
end;


Это сообщение отредактировал(а) <Spawn> - 12.1.2005, 13:16


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Петрович
Дата 12.1.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Если интересует именно перевернуть строки. Т.е. первая становится последней, вторая становится предпоследней, .... , предпоследняя становится второй, последняя становится первой. Тогда вот очень эффективный вариант:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
 i :Integer;
 s :String;  // буфер для перестановки элементов
begin
 // переворот строк ListBox1 "задам наперед"
 // используется цикл по половине массива
 for  i := 0  to  (ListBox1.Count div 2)  do begin
   // перестановка элементов i и n-i где n - максимальный индекс массива
   s := ListBox1.Items[i];
   ListBox1.Items[i] := ListBox1.Items[ListBox1.Count-1-i];
   ListBox1.Items[ListBox1.Count-1-i] := s;
 end;
end;






--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
oksancik
Дата 13.1.2005, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.12.2004

Репутация: нет
Всего: нет



Всё верно,но только это простой переворот,а мне надо использовать массив. Мне самой это всё необьясняли, дали задания и всё.
P.S. тоесть из ListBox1 данные переносит в массив, потом его переворачивать, а уж потом выносить его в ListBox2. (Мне подруга просто обьяснила что точно должно делатся, а как у нас неочень. Вот...)
Код
procedure TForm1.AddClick(Sender: TObject);
begin
ListBox1.Items.Add((Edit1.Text));
end;
procedure TForm1.Button2Click(Sender: TObject);
var  mas :array of Integer;
    i,temp :integer;
begin
 ListBox2.Items.Clear;
 SetLength(Mas, ListBox1.Items.Count);
 for  i := 0  to ListBox1.Count -1  do
  mas[i]:=StrToInt(ListBox1.Items[i]);
 for i:=0 to (ListBox1.Items.Count div 2) do
 begin
   temp :=mas[i];
   mas[i] := mas[i-1];
   mas[i-1]:=temp;
 end;
 for i:=0 to Length(mas)-1 do
   ListBox2.Items.Add(IntToStr(mas[i]));
 end;
end.

PM MAIL   Вверх
Петрович
Дата 13.1.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Тогда уж точнее будет так:

Код

procedure TForm1.AddClick(Sender: TObject);
begin
 ListBox1.Items.Add((Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 mas :array of Integer;    
 i,temp :integer;
begin  
 ListBox2.Items.Clear;  
 SetLength(Mas, ListBox1.Items.Count);  

 for  i := 0  to ListBox1.Count -1  do  
   mas[i]:=StrToInt(ListBox1.Items[i]);  

 for i:=0 to (Length(mas) div 2) do  begin    
   temp := mas[i];    
   mas[i] := mas[Length(mas)-1-i];    
   mas[Length(mas)-1-i]:=temp;  
 end;  

 ListBox2.Clear;
 for i:=0 to Length(mas)-1 do    
   ListBox2.Items.Add(IntToStr(mas[i]));  
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.