![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rudolf |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Задача вобщем такая:
Приложение предназначено для сортировки списка фамилий учебной группы и должно осуществлять: -ввод каждой фамилии в редактируемое поле; -добавление ее к списку; -удаление фамилии из списка; -cортировку списка фамилий. Интерфейс приложения должен включать главное меню, поле редактирования, список с вертикальной полосой прокрутки, кнопки "Добавить", "Удалить", "Сортировка". Список я делаю через ListBox (не динамически), добавлять, удалять я сделал, а при сортировке вылетает ошибка.Подскажите пожалста в чем может быть дело.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int i;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//добавляем элемент
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Items->Add(Edit1->Text);
}
//---------------------------------------------------------------------------
//запоминаем номер выделенного элемента
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
i=ListBox1->ItemIndex;
}
//---------------------------------------------------------------------------
//удаляем выделенный элемент
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListBox1->Items->Delete(i);
}
//---------------------------------------------------------------------------
//сортируем список
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString s,s1,s2;
for (int j = 0; j <= ListBox1->Items->Count; j++)
for (int k= ListBox1->Items->Count;k<=j+1; k--)
{ s1=ListBox1->Items->Strings[k-1];
s2=ListBox1->Items->Strings[k];
if (s1[1]>s2[1])
{
s=ListBox1->Items->Strings[k-1];
ListBox1->Items->Strings[k-1]=ListBox1->Items->Strings[k];
ListBox1->Items->Strings[k]=s;
}
}
}
//---------------------------------------------------------------------------
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Подскажите пожалста в чем может быть дело. В выходе за границы массива:for (int j = 0; j <= ListBox1->Items->Count; j++)
for (int k= ListBox1->Items->Count;k<=j+1; k--) {
s1=ListBox1->Items->Strings[k-1];
s2=ListBox1->Items->Strings[k]; // <--- Здесь !!!
...
}
Там, где я показал что будет при k = ListBox1 -> Items -> Count ? Выход за пределы... Ибо нет такого элемента. Список заканчивается на элементе с индексом (ListBox1 -> Items -> Count) - 1 |
Rudolf |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
То есть k нужно присвоить (ListBox1 -> Items -> Count) - 1, и для j установить такую же границу?Если так, то опять ошибка у меня выскакивает....
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
for(int i = 0; i <= ListBox1 -> Items -> Count - 1; i++)
for(int j = ListBox1 -> Items -> Count - 1; j >= i+1; j--) {
s1=ListBox1->Items->Strings[j-1];
s2=ListBox1->Items->Strings[j];
if (s1[0]>s2[0]) { // <--- Почему с [1] ? Отсчет начинается с 0...
s=ListBox1->Items->Strings[j-1];
ListBox1->Items->Strings[j-1]=ListBox1->Items->Strings[j];
ListBox1->Items->Strings[j]=s;
}
}
Так тоже ошибка? У меня на Дельфи такое вполне работает (а ведь они с Билдером - "близнецы-братья") |
Rudolf |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Да так работает, спасибо....ошибку я нашел (написал <= , вместо >=), а на счет строк то в билдере отсчет у типа AnsiString начинается с первого элемента(помоему в делфи тоже также...разве нет?)
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 5:35 |