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

Проблема при работе с vector

26.11.2019, 09:24. Показов 976. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Задача: "Дана непустая последовательность различных натуральных чисел, за которой
следует 0. Определить порядковый номер наименьшего из них."

Появилась идея: вводить числа в Edit и, при нажатии на кнопку Enter, добавлять в вектор.
Да только что-то идёт не так. И информации про vector для меня не достаточно.

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vector <int> vec(0);
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
    int i=0;
    if ((Key>='0')&&(Key<='9'))
        return;
    if (Key==VK_RETURN) {
        i+=1;
        vec.resize(i);
        vec.push_back(StrToInt(Edit1->Text));
        Edit1->Text="";
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    sort(vec.begin(), vec.end());
    Label2->Caption=Label2->Caption+vec[0];
    Label3->Caption=Label3->Caption+vec.size();
    for(int i = 0; i < vec.size(); i++) {
        Memo1->Lines->Add(vec[i]+" ");
    }
}
Пока использую sort, чтобы с ним хоть заработало, а потом уже порядковый номер буду искать...

Заранее всем спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2019, 09:24
Ответы с готовыми решениями:

Непонятная ошибка при работе с vector
Здравствуйте! Что делает программа: Определить, сколько раз в заданном предложении встречаются 3 одинаковых символа подряд (учитываем,...

Vector или new при работе с большим массивом данных?
Подскажите, что лучше использовать (с точки зрения быстродействия) при работе с большим массивом данных - vector или динамический массив?...

Отличие erase() и pop_back() при работе с std::vector
При использовании функций ersae() и pop_back() происходит различие по времени исполнения операции. Как устроены и асимптотически отличаются...

10
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
26.11.2019, 09:54
AlexKreep, не нужно делать одновременно и resize и push_back, т. к. push_back тоже увеличивает размер вектора на один элемент.
1
61 / 50 / 12
Регистрация: 25.01.2010
Сообщений: 257
26.11.2019, 15:28
Цитата Сообщение от AlexKreep Посмотреть сообщение
if ((Key>='0')&&(Key<='9'))
        return;
А это зачем? При вводе цифр ничего в вектор не добавится.
1
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
26.11.2019, 15:37
Проверку на ввод только разрешенных символов лучше сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TfMain::Edit1KeyPress(TObject *Sender, wchar_t &Key)
{
      Set <wchar_t, 0, 255> Dig;
      Dig << '0' << '1' << '2' << '3' << '4' << '5' << '6' << '7' << '8' << '9' << '.' << '-';
 
       if(Key==13) 
       {
           //какие-то действия
       }
       if(Dig.Contains(Key)) KeyPress(Key);
       else Key=0;
 
}
Взято у Архангельского
1
26.11.2019, 15:49

Не по теме:


TrollHammer, пример что у ТС, тоже с книг Архангельского...вроде как =)

0
26.11.2019, 15:58

Не по теме:

Dinkin, у Архангельского когда-то очень давно (BC5) взял за основу этот шаблон. У ТС и намека нет на проверку ввода. Точнее - попытка

0
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
26.11.2019, 17:01
Цитата Сообщение от samsebe Посмотреть сообщение
А это зачем? При вводе цифр ничего в вектор не добавится.
У ТС добавляться должно по нажатию Enter.
AlexKreep, переменная i пересоздаётся при каждом нажатии, она всегда будет равна 0. Собственно, она и не нужна. У вектора всегда можно посмотреть его текущий размер, а чтобы добавить в конец новый элемент, размер вообще знать не нужно.

Если числа вводятся только целые, то достаточно установить свойство эдита NumbersOnly в true, в onKeyPres остаётся только отлавливать Enter.
1
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
26.11.2019, 17:01
Цитата Сообщение от AlexKreep Посмотреть сообщение
Дана непустая последовательность различных натуральных чисел, за которой следует 0
Эта задача пришла из глубокой DOS-овской старины и в концепции событийного программирования она выглядит просто тупо, если Вы не делаете консольное приложение (а Вы его не делаете, судя по используемым компонентам)... Поэтому тут видится 2 варианта решения задачи:
1. Забить на это "оканчивается 0" и сначала задать число элементов массива (вектора), пусть даже в том же Эдите, (хотя для ввода целых чисел существуют более адекватные компоненты, тот же SpinEdit), потом заполнить его, используя StringGrid и уже потом находить минимальный компонент и его индекс
2. Забить на массив, вектор и т.д. Просто проверять число при вводе - а не минимум ли он... Но тогда уж надо делать проверку, не был ли введен 0, и если был - выводить результат:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <System.Math.hpp>
...
int Minimum = MaxComp;
...
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
   int k;
   if(Key == VK_RETURN)
     {
        if(TryStrToInt(Edit1->Text, k))
          {
             if(k == 0)
               Label1->Caption = IntToStr(Minimum);
             else
               {
                  Minimum = (k < Minimum) ? k : Minimum;
                  Memo1->Lines->Add(k);
               }
          }
        Edit1->Clear();
     }
}
1
2 / 1 / 1
Регистрация: 23.11.2017
Сообщений: 100
26.11.2019, 20:51  [ТС]
samsebe, ограничения на ввод символов в Edit.

Добавлено через 5 минут
Lelik-pahan, точно ведь... Как можно было упустить это, когда я сам знал, что этот if выступает в качестве своеобразного цикла?..
Спасибо.

Добавлено через 5 минут
D1973, первый вариант был в голове, но указывать заранее число элементов как-то не то...
Второй вариант легче. И если признаться честно, я раньше почему-то не представлял решение данной задачи без массивов. Не понимаю почему я сам не додумался...
Спасибо за помощь.

Добавлено через 29 минут
Lelik-pahan, только в Memo не выводятся значения вектора. Вместо этого - буква i. Откуда она взялась вообще?..
0
61 / 50 / 12
Регистрация: 25.01.2010
Сообщений: 257
26.11.2019, 22:41
Цитата Сообщение от AlexKreep Посмотреть сообщение
Memo1->Lines->Add(vec[i]+" ");
int + String приводит к такому результату
1
2 / 1 / 1
Регистрация: 23.11.2017
Сообщений: 100
27.11.2019, 09:29  [ТС]
Всем спасибо! Проблему решил. Задача работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2019, 09:29
Помогаю со студенческими работами здесь

проблема при работе с китайским J-LINK 8 или же проблема с с
Всем привет. Решил Сам собрать себе дисковери кит на базе at91sam7s64-ek. Подарили мне китайский J-Link 8 c прошивкой 3.20. Недолго...

Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана
Проблема с функцией BuildTable. Компилируется, но в процессе работы возникает ошибка. // Huffmann.cpp: определяет точку входа для...

Проблема при работе с большой БД
Проблема в следующем - есть скрипт, который выполняет запрос к БД, в которой много записей, при этом возникает загрузка сервера на 100%....

Проблема при работе с потоками
Помогите решить тупую проблему! Есть массив строк: String MassStr = new String{'one', 'two', 'three'}; Теперь я хочу чтобы...

Проблема при работе с Word
Доброго вечера, добрые помощники!!!! Знаю, что похожих тем и статей много, но разобраться со своим кодом все равно ничего не помогает.....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru