С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220

Вычесть из каждого числа в строке заданное

06.10.2014, 11:23. Показов 2154. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто подскажет по поводу такого вопроса, сразу говорю есть строка ansistring, вида "12,12,33,56,23,67"
причем цифр в строке всегда разное кол-во, вопрос в следующе как мне пройти по всей строке и каждое число вычесть с числом заданным в spinedit.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2014, 11:23
Ответы с готовыми решениями:

Дан список, элементы которого - натуральные числа. Вычесть из каждого элемента списка 1
Дан список, элементы которого - натуральные числа. Вычесть из каждого элемента списка 1.

Для каждого натурального числа посчитать максимальное произведение цифр, не превышающее заданное N
Здравствуйте,есть такая задача,вроде простая,но не могу понять алгоритм решения. Есть натуральное число N, для каждого натурального числа...

Вычесть из каждого столбца матрицы максимальный элемент для каждого столбца, и результат вывести в матрицу
Что нужно добавить , чтобы вычесть из каждого столбца матрицы максимальный элемент для каждого столбца и результат вывести в матрицу? ...

20
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
06.10.2014, 11:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Clear();
TStringList *lst = new TStringList();
lst->Clear();
lst->Delimiter = ',';
lst->DelimitedText = L"12,12,33,56,23,67";
lst->StrictDelimiter = true;
for(int i = 0; i < lst->Count; i++)
{
  Memo1->Lines->Add(IntToStr(StrToInt(Edit1->Text) - lst->Strings[i].ToInt()));
}
 
delete lst;
lst = NULL;
 
}
1
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 12:02  [ТС]
Дело в том что этих строк несколько, они являются ячейками stringgrid, как бы надо проходить до запятой, запоминать число и вычесть от него заданное число и записать в эту же строку, вот.
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 13:19
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Дело в том что этих строк несколько, они являются ячейками stringgrid, как бы надо проходить до запятой, запоминать число и вычесть от него заданное число и записать в эту же строку, вот.
Ну так Вы ставьте задачу изначально правильно, а то получается Sasha, тратил свое время зря.
Из StringGrid'а выгружаете все ваши данные в файл. Файл грузите в StringList. Парсите текст и делаете все нужные операции. Далее сохраняете из StringList'а в файл и засовываете назад в StringGrid. (способ используя код Sasha )
Либо просто идете по каждой ячейке StringGrid и если там число, то вычитаете заданное и все. (способ проще)
Либо если я не правильно понял, то есть в ячейке хранится запись ("12,12,33,56,23,67"). то каждую ячейку считывай в StringList и после парсинга и необходимых арифметических вычислений добавляй назад в ячейку StringGrid.
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 13:40  [ТС]
Я так и делал, только у него
Memo1->Lines->Add(IntToStr(StrToInt(Edit1->Text) - lst->Strings[i].ToInt()));
каждая строка добавляется в Memo1, я сделал чтобы добавлялось во временную строку, а затем писалось в StringGrid, но немного неправильно делает, почему то данные дублируются, после первого прохода странно как то
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
06.10.2014, 13:41
Sasha, CommaText гораздо проще использовать...
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 13:46
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Я так и делал, только у него
Memo1->Lines->Add(IntToStr(StrToInt(Edit1->Text) - lst->Strings[i].ToInt()));
каждая строка добавляется в Memo1, я сделал чтобы добавлялось во временную строку, а затем писалось в StringGrid, но немного неправильно делает, почему то данные дублируются, после первого прохода странно как то
Я думаю Sasha привел свой код чтоб наглядно показать что все работает, а не как эталон решения вашей задачи.
Что значит дублируются? при каких условиях, подробнее можно?
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 13:56  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TStringList *LinkedAnalog = new TStringList();
LinkedAnalog->Clear();
LinkedAnalog->Delimiter = ',';
for (int i = 0; i < Result->RowCount-1; i++)
{
  if(Result->Cells[4][i+1]!="")
    {
      LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
      for(int i = 0; i < LinkedAnalog->Count; i++)
     {
       Temp+=(IntToStr(LinkedAnalog->Strings[i].ToInt()-OffsetAnalog->Value));
       Temp+=",";
     }
    }
}
delete LinkedAnalog;
LinkedAnalog = NULL;
 
}
вот в строке Temp вроде правильные значения а дальше в string при добавлении дублируются(когда строка встречается 1 раз она высчитывается правильно, но во второй строке добавляется предыдущая строка к новой))
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 14:06
Речь идет о переменной Temp ?

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TStringList *LinkedAnalog = new TStringList();
LinkedAnalog->Clear();
LinkedAnalog->Delimiter = ',';
for (int i = 0; i < Result->RowCount-1; i++)
{
 if(Result->Cells[4][i+1]!="")
{
LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
 for(int i = 0; i < LinkedAnalog->Count; i++)
{
Temp+=(IntToStr(LinkedAnalog->Strings[i].ToInt()-OffsetAnalog->Value));
Temp+=",";
}
     Result->Cells[4][i+1]=Temp;//как то так наверное
     Temp="";//и так
}
}
delete LinkedAnalog;
LinkedAnalog = NULL;
}
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 14:10  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int i = 0; i < Result->RowCount-1; i++)
{
  if(Result->Cells[4][i+1]!="")
    {
      LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
      for(int k = 0; k < LinkedAnalog->Count; k++)
     {
       Temp+=(IntToStr(LinkedAnalog->Strings[k].ToInt()-OffsetAnalog->Value));
       Temp+=",";
     }
     Temp.Delete(Temp.Length(),1);
     Result->Cells[4][i+1]=Temp;
    }
    delete LinkedAnalog;
    LinkedAnalog = NULL;
}
}
Ну вот теперь ругается на строку
LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
Temp это строка не переменная(типа AnsiString)
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 14:12
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Temp это строка не переменная(типа AnsiString)
Так сделайте ее переменной AnsiString в чем проблема то?
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 14:13  [ТС]
Дублируется 1 строка на все остальные хоть убей
Сделал я это все, вот такой код привожу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TStringList *LinkedAnalog = new TStringList();
AnsiString Temp="";
LinkedAnalog->Clear();
LinkedAnalog->Delimiter = ',';
for (int i = 0; i < Result->RowCount-1; i++)
{
  if(Result->Cells[4][i+1]!="")
    {
      LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
      for(int k = 0; k < LinkedAnalog->Count; k++)
     {
       Temp+=(IntToStr(LinkedAnalog->Strings[k].ToInt()-OffsetAnalog->Value));
       Temp+=",";
     }
     Temp.Delete(Temp.Length(),1);
     Result->Cells[4][i+1]=Temp;
    }
 
}
delete LinkedAnalog;
LinkedAnalog = NULL;
идет дубль 1 строки
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 14:15
Лучший ответ Сообщение было отмечено Игорь1986 как решение

Решение

пробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TStringList *LinkedAnalog = new TStringList();
AnsiString Temp="";
LinkedAnalog->Clear();
LinkedAnalog->Delimiter = ',';
for (int i = 0; i < Result->RowCount-1; i++)
{
if(Result->Cells[4][i+1]!="")
{
LinkedAnalog->DelimitedText = Result->Cells[4][i+1];
for(int k = 0; k < LinkedAnalog->Count; k++)
{
Temp+=(IntToStr(LinkedAnalog->Strings[k].ToInt()-OffsetAnalog->Value));
Temp+=",";
}
Result->Cells[4][i+1]=Temp;
Temp="";
}
}
delete LinkedAnalog;
LinkedAnalog = NULL;
1
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 14:21  [ТС]
Все спс получилось один момент все таки , надо удалять запятую после последнего числа, иначе повторно пишет ошибку ,а так вроде хорошо все
Temp.Delete(Temp.Length(),1);
Весь прикол был прост в обнулении этого Temp
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 14:23
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Все спс получилось один момент все таки , надо удалять запятую после последнего числа, иначе повторно пишет ошибку ,а так вроде хорошо все
Внимательнее надо быть, ведь я Вам сказал так сделать еще в этом посте https://www.cyberforum.ru/post6686853.html
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 14:45  [ТС]
Кстати вот интересно почему у меня нет этого метода StrictDelimiter, без него могут возникнуть проблемы, а его в stringlist нет совсем
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 14:46
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Кстати вот интересно почему у меня нет этого метода StrictDelimiter
Версия и название среды разработки?
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
06.10.2014, 14:49  [ТС]
C++ Builder6
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
06.10.2014, 14:58
Игорь1986, внимательно прочти тему, может, увидишь упоминание о CommaText, специально предназначенном для работы со строкой, в которой разделитель - запятая...
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
06.10.2014, 15:07
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Кстати вот интересно почему у меня нет этого метода StrictDelimiter, без него могут возникнуть проблемы, а его в stringlist нет совсем
Цитата Сообщение от Игорь1986 Посмотреть сообщение
C++ Builder6
вот тебе и ответ. начиная с версии CodeGear RAD Studio 2007, StrictDelimiter присутствует.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.10.2014, 15:07
Помогаю со студенческими работами здесь

Вычесть из каждого элемента списка 1.
Дан список, элементы которого натуральные числа. Вычесть из каждого элемента списка 1. Заранее спасибо.

Если заданное число является положительным, то прибавить к нему 1, иначе вычесть из него 2
Дано целое число. Если оно является положительным, то прибавить к нему 1. В противном случае вычесть из него 2. Вывести полученное число. ...

Заданное слово повторить в строке заданное количество раз
задали по ассемблеру написать лабу.в командной строке задаются 2 параметра.1-слово,2-кол-во повторений нужно записать это слово,число...

Вычесть из каждого элемента последовательности последний
Даны натурально число n, действительные числа x1, ... , xn (n&gt;=2). Получить последовательность x1 - xn, x2 - xn, ... , xn-1 - xn. Нужно...

Ко всем положительным элементам массива прибавить первый элемент, а из нулевых вычесть заданное число
Всем привет. Ребят помогите срочно. Не могу написать простенькую программу. Дан массив M(10). Ко всем положительным нужно прибавить первый...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru