Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86

Работа с циклом if else.

29.01.2012, 12:28. Показов 4731. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго утра, дня или вечера! Кому как
Я понимаю, что, возможно, задаю очень глупый вопрос(заранее прошу прощения), но не могу разобраться с циклом.

C++
1
2
3
4
5
6
7
8
9
10
11
for (int i=sl->Count-1;i>=0;i--)
if (sl->Strings[i].Pos(edit3->Text))
{
String s=sl->Strings[i];
id=s.SubString(4,s.Pos("Name=")-4).ToInt();
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
break;
}
esle Form3->Show();
Если не находится нужного значения, то просто выскакивает ошибка и прога виснет. А надо, чтобы выскакивала другая форма без всяких ошибок.
Получилось только сделать, чтобы форма вместе с ошибкой выскакивала.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2012, 12:28
Ответы с готовыми решениями:

работа с циклом
Помогите пожалуйста!!! В памяти находятся пять чисел. Найдите наименьшее из них.

Работа с циклом
Ребят, я хочу, чтобы в каждой ячейке генерировался число и в каждой следующей ячейке число было на 1 единицу больше. Ну и я понимаю, что...

Работа с циклом FOR
День добрый, требуется циклом пройтись по комбобоксам и едитам и зделать их видимыми, ну или активными: for c:=1 to J do ...

44
43 / 7 / 0
Регистрация: 16.09.2009
Сообщений: 115
29.01.2012, 14:30
оттрассируй удаление переменной в цикле.
imho, ты просишь удалить то, чего нет.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 14:34  [ТС]
Цитата Сообщение от any_stuff Посмотреть сообщение
оттрассируй удаление переменной в цикле.
imho, ты просишь удалить то, чего нет.
Цикл работает нормально и удаляет всё, что надо. Удаляет он строки, которые содержат значение из edit3. А мне надо, чтобы не найдя строк, содержащих значение из edit3, выдавалось сообщение, информирующее об этом.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 14:50
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ищем текст
for (int i=sl->Count-1;i>=0;i--)
if (sl->Strings[i].Pos(edit3->Text))
{
String s=sl->Strings[i];
id=s.SubString(4,s.Pos("Name=")-4).ToInt();
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
// думаю лишнее.
//break;
}
// не нашли - вышли
else ShowMessage("Не нашли");
1
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 14:54  [ТС]
QVO, Сообщение "Не нашли" выдаёт, жму там "Ок" и оно выскакивает опять, и опять и так далее. Как быть?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:10
ParadoxX27, секунду. после сообщения поставить break\return.
1
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 15:12  [ТС]
QVO, спасибо, работает
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:16
ParadoxX27, а это то что вам нужно?
если цикл в первой строке sl не находит текст из edit3, то прекращает поиск.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 15:43  [ТС]
QVO, вот почему-то только щас догадался проверить всю работоспособность.
Немного не то.
Здесь цикл ищет значение из edit3, начиная с последней строки и идя в начало. Но, дойдя до начала и не найдя нужного значения поиск должен был прекратиться и выдать сообщение.
Вот что мне нужно.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 15:51
ParadoxX27,
C++
1
2
3
4
5
6
7
8
        for (int i = ListBox1->Items->Count-1; i > -1; i--)
        {
                if (ListBox1->Items->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {
                        ShowMessage("Found");
                }
                else if (i == 0) ShowMessage("Not Found");
        }
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:00  [ТС]
QVO, Странно, сделал по аналогии - вообще ничего не происходит. Либо вне зависмости от того, есть или нет искомое значение в файле, всё равно выводит "не найдено". Т.е. даже, если я знаю, что такое значение есть и пытаюсь его найти, он всё равно выводит сообщение о том, что такого не найдено.
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:06
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//--------------------------------
        TStringList *sl = new TStringList();
        sl->Add("Ноль");
        sl->Add("Один");
        sl->Add("Два");
        sl->Add("Три");
//--------------------------------
        for (int i = sl->Count-1; i > -1; i--)
        {
                if (sl->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {   
            /* Необходима проверка
            if(i > 1)
            {
                id=s.SubString(4,s.Pos("Name=")-4).ToInt();
                sl->Delete(i);
                sl->Delete(i-1);
                sl->Delete(i-2);
            }
                        */
                        ShowMessage("Found");
                }
                else if (i == 0) ShowMessage("Not Found");
        }
 
/*Проблема в том, если Искомое Слово будет найдене в строке с индексом 0..1,
то мы уйдем за пределы при удаление.*/
 
                        sl->Delete(0);
                        sl->Delete(0-1); // -1
                        sl->Delete(0-2); // -2
 
                        sl->Delete(1);
                        sl->Delete(1-1);
                        sl->Delete(1-2); // -1
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:10  [ТС]
Цитата Сообщение от QVO Посмотреть сообщение
/*Проблема в том, если Искомое Слово будет найдене в нулевой строке,
то мы уйдем за пределы при удаление.*
Искомое значение никогда не будет найдено в 0 или даже 1, там структура файла этого не допустит. В общем надо, получается, чтобы цикл, дойдя до 0 строки и не найдя нужного значения, завершался и выдавал сообщение. Вроде бы так оно и получается i==0, но всё равно работает не так, как надо. Или я что-то напутал?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:19
ParadoxX27, прикрепил программу с таким кодом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//--------------------------------
        TStringList *sl = new TStringList();
        sl->Add("Ноль");
        sl->Add("Один");
        sl->Add("Два");
        sl->Add("Три");
//--------------------------------
        for (int i = sl->Count-1; i > -1; i--)
        {
                if (sl->Strings[i].UpperCase() == Edit1->Text.UpperCase())
                {
                        ShowMessage("Found");
                        break; // стоит добавить
                }
                else if (i == 0) ShowMessage("Not Found");
        }
 
}
//---------------------------------------------------------------------------
Работает
Вложения
Тип файла: rar sl.rar (9.3 Кб, 6 просмотров)
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
29.01.2012, 16:25  [ТС]
QVO, в ней, если пишу "Ноль", то выдаёт "найдено", а если что-нибудь из "Один", "Два" или "Три", то сначала "Найдено", а потом сразу "Не найдено". Почему так? О_о
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
29.01.2012, 16:47
ParadoxX27, потому что после того как нашли стоит добавить break я в коде написал же.
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
30.01.2012, 04:57  [ТС]
Цитата Сообщение от QVO Посмотреть сообщение
ParadoxX27, потому что после того как нашли стоит добавить break я в коде написал же.
Тогда работает. Сразу не заметил исправление.
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i=sl->Count-1;i>-1;i--)
{
        if (sl->Strings[i].Pos(edit3->Text))
        {
        sl->Delete(i);
        sl->Delete(i-1);
        sl->Delete(i-2);
        break;
        }
        else if (i == 0)
        ShowMessage("Not Found");
        return;
}
Вот это не работает

Добавлено через 11 часов 43 минуты
Может бы ещё что-нибудь подскажет кто?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.01.2012, 06:04
1. не понятно, зачем искать "с хвоста"
2. для чего прерывать цикл после первого найденного совпадения (вот вам и "сначала "Найдено", а потом сразу "Не найдено"") - зачем break - цикл так долго работает или дальше сопадений не может быть по умолчанию ? может, достаточно просто перейти к следующе итерации: continue; - если очень уж хочется что-нибудь такое сделать ?
3. зачем
C++
1
2
3
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
, может, достаточно просто
C++
1
sl->Delete(i);
(где-то подобное уже обсуждалось )
4. и куда вы намереваетесь попасть после использования довольно гремучей смеси из else, ShowMessage и return ?
0
5 / 5 / 1
Регистрация: 25.01.2012
Сообщений: 86
30.01.2012, 06:11  [ТС]
LK, 1. Надо искать именно с "хвоста", так задумано
2. После первого совпадения дальше совпадений быть не может.
3. Нужно удалить ещё 2 строки выше строки с индексом i, по этому и
C++
1
2
3
sl->Delete(i);
sl->Delete(i-1);
sl->Delete(i-2);
4. Ну по задумке, если совпадений после первого прохода по файлу нет - выскакивает сообщение об этом, которое закрывается нажатием "Ок" и предлагается изменить условия поиска.

Вот
0
30.01.2012, 06:19

Не по теме:

да мне как бы побарабану, просто спросил

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2012, 06:19
Помогаю со студенческими работами здесь

Работа с Циклом
Добрый вечер такой вопрос $(document).ready(function(){ $('#text').each(function(i, d){ $(d).proList();}); ...

Работа с циклом
Приветствую! Требуется ваша помощь. Кратко опишу проблематику: Допустим у нас есть сборка (деталь), которая состоит из других деталей...

Работа с циклом do while
Здравствуйте! есть задача в которой используется метод прогонки с проверкой условия. я использовала следующий цикл: ...

Работа с циклом
У меня есть вот такой цикл, здесь выводится список новостей $result = mysql_query("SELECT...

Работа с циклом do{}while();
Приветствую всех кто заглянул такая проблема сам цикл запускается но не отрабатывает почему то в чём может быть проблема? using...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru