Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/39: Рейтинг темы: голосов - 39, средняя оценка - 4.90
 Аватар для Snake-CD
1 / 1 / 0
Регистрация: 18.09.2011
Сообщений: 5

Редактирование массива StringGrid в C++ Builder

18.09.2011, 02:52. Показов 7814. Ответов 11

Студворк — интернет-сервис помощи студентам
Доброй ночи, товарищи. Помогите разобраться с небольшим и не столь сложным вопросом. У меня стоит задача, чтобы программа изменяла количество ячеек (по горизонтали, то есть кол-во столбцов) при вводе в поле Edit1 какого-либо целого числа. Иными словами в поле Edit1 должна вводиться размерность матрицы, которая сразу изменяет количество столбцов в StringGrid1, при том что изначально кол-во строк равно 5 (поскольку не знаю как можно по грамотней сделать). Вот мой кусок программы для кнопки расчета (задача посложнее немного, но мне надо выяснить именно этот момент):

C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int z, Sr, i, s, N;
 float max;
 z=StrToInt(Edit2->Text);
 N=StrToInt(Edit1->Text);
 while(N<22)
        {N=StrToInt(Edit1->Text);
        }
 StringGrid1->ColCount=N;
 StringGrid2->ColCount=N;
...
Но после его выполнения программа зависает.
Заранее благодарен за помощь.

Добавлено через 43 минуты
Приношу свои извинения, ошибку обнаружил. У меня вышел бесконечный цикл.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2011, 02:52
Ответы с готовыми решениями:

Есть 2 StringGrid в С++ Builder, и нужно взять оттуда данные и заполнить ими 3 StringGrid, как бы сложить 2 та
Код C++ void __fastcall TForm1::Button1Click(TObject *Sender) { int i,j; float p,p1; for (i = 0; i &lt; 48; i++) { ...

Редактирование в StringGrid
Здравствуйте,есть таблица StringGrid,заголовок состоит из первых двух строк и первого столбца. Задание такое,в первой строки вставить...

Редактирование StringGrid
Добрый день . Не знаю как точно написать но попытайтесь понять . Вот у меня есть таблица StringGrid со случайными значениями (все...

11
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.09.2011, 05:07
Основы TStringGrid
TStringGrid
Дополнительные примеры TStringGrid

Мне вообще не понятно, что вы хотите сделать этим кодом:
C++
1
2
3
4
N=StrToInt(Edit1->Text);
 while(N<22)
        {N=StrToInt(Edit1->Text);
        }
и так у меня не подвисает:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// .CPP
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int z, Sr, i, s, N;
  float max;
  Edit2->Text = 22;
  Edit1->Text = 22;
 
  z=StrToInt(Edit2->Text);
  N=StrToInt(Edit1->Text);
  while(N<22)  {
    StringGrid1->ColCount=N;
    StringGrid2->ColCount=N;
//    N=StrToInt(Edit1->Text);
  }
//  StringGrid1->ColCount=N;
//  StringGrid2->ColCount=N;
  Memo1->Lines->Add("Button1 Click");
  Memo1->Lines->Add("StringGrid1->ColCount: "+IntToStr(StringGrid1->ColCount));
  Memo1->Lines->Add("StringGrid2->ColCount: "+IntToStr(StringGrid2->ColCount));
  Memo1->Lines->Add("");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  int z, Sr, i, s, N;
  float max;
  Edit2->Text = 22;
  Edit1->Text = 22;
 
  z=StrToInt(Edit2->Text);
  N=StrToInt(Edit1->Text);
  for(i=0;i<N;i++)  {
    StringGrid1->ColCount=N;
    StringGrid2->ColCount=N;
  }
//  StringGrid1->ColCount=N;
//  StringGrid2->ColCount=N;
  Memo1->Lines->Add("Button2 Click");
  Memo1->Lines->Add("StringGrid1->ColCount: "+IntToStr(StringGrid1->ColCount));
  Memo1->Lines->Add("StringGrid2->ColCount: "+IntToStr(StringGrid2->ColCount));}
 
// .H - Компоненты на форме
 
class TForm1 : public TForm
{
__published:  // IDE-managed Components
  TEdit *Edit1;
  TEdit *Edit2;
  TButton *Button1;
  TStringGrid *StringGrid1;
  TMemo *Memo1;
  TStringGrid *StringGrid2;
  TLabel *Label1;
  TLabel *Label2;
  TButton *Button2;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);
private:  // User declarations
public:    // User declarations
  __fastcall TForm1(TComponent* Owner);
};
, слава Борланду .
Вещь.док.:
Миниатюры
Редактирование массива StringGrid в C++ Builder  
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.09.2011, 05:13
дополнение
Миниатюры
Редактирование массива StringGrid в C++ Builder  
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.09.2011, 05:18
может, вы там не цикл, а сравнение мечтаете увидеть, и не догадываетесь об этом ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int z, Sr, i, s, N;
  float max;
  Edit2->Text = 5;
  Edit1->Text = 5;
 
  z=StrToInt(Edit2->Text);
  N=StrToInt(Edit1->Text);
  if(N<22)  {
//    StringGrid1->ColCount=N;
//    StringGrid2->ColCount=N;
    N=StrToInt(Edit1->Text);
  }
  StringGrid1->ColCount=N;
  StringGrid2->ColCount=N;
  Memo1->Lines->Add("Button1 Click");
  Memo1->Lines->Add("StringGrid1->ColCount: "+IntToStr(StringGrid1->ColCount));
  Memo1->Lines->Add("StringGrid2->ColCount: "+IntToStr(StringGrid2->ColCount));
  Memo1->Lines->Add("");
}
почему сообщения создаются заново, а не добавляются, для меня - великая тайна...
Миниатюры
Редактирование массива StringGrid в C++ Builder  
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
18.09.2011, 12:06
а какая логика в том, что сначала в едиты пишем 5, затем в z и N, считываем эти 5, затем проверяем меньше ли оно 22, и если меньше то опять таки пишет 5 в N. Вопрос: как 5 может быть больше 22? Там в N ничего кроме 5 и не будет
и что это за z, что там должно быть?
и может лучше
C++
1
TryStrToInt(Edit1->Text,N);
и для меня загадка, нафига там вообще циклы оО
2
 Аватар для Snake-CD
1 / 1 / 0
Регистрация: 18.09.2011
Сообщений: 5
18.09.2011, 16:12  [ТС]
Ещё раз повторю, что проблему вроде как решил и все работает как надо ))
У меня была задача ввести одномерный массив с проверкой количества ячеек в нем, чтобы было не больше 21. Это было то что мне необходимо, и, частично (именно то что нужно было по заданию) я сделал. Сразу предупреждаю, что я ещё новичок в этом вопросе, так что сильно не бейте А теперь, если интересно, распишу подробнее:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
 
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int z, Sr, i, s, N, p;
 float max;
 z=StrToInt(Edit2->Text);
 N=StrToInt(Edit1->Text);
 Sr=0;
 s=0;
 for(i=0;i<N;i++)
        {if(StringGrid1->Cells[i][0]>=0)
                {Sr=Sr+StrToInt(StringGrid1->Cells[i][0]);
                s=s+1;
                }
        }
 Sr=Sr/s;
 Edit3->Text=Sr;
 max=-1e10;
 if(Sr>z)
        {for(i=0;i<N;i++)
                {p=0;
                p=StrToInt(StringGrid1->Cells[i][0]);
                if(p<0)
                        {StringGrid2->Cells[i][0]=IntToStr(p+z);
                        }
                else
                        {StringGrid2->Cells[i][0]=IntToStr(p-z);
                        }
                if(StringGrid2->Cells[i][0]>max)
                        {s=0;
                        max=StrToFloat(StringGrid2->Cells[i][0]);
                        s=i+1;
                        }
                }
        }
 Edit4->Text=IntToStr(s);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 int N;
 N=StrToInt(Edit1->Text);
 while(N>21)
        {Edit1->Text=0;
        ShowMessage("Введите число не превышающее 21");
        N=StrToInt(Edit1->Text);
        }
 StringGrid1->ColCount=N;
 StringGrid2->ColCount=N;
}
//---------------------------------------------------------------------------
Задание:
Одномерные массивы
( максимум, минимум, сумма, произведение)

К приведенной ниже задаче:
1. Сделать математическую постановку;
2. Начертить блок-схему алгоритма решения;
3. Подготовить данные для контрольного счета и макет печати (распечатывать исходные данные и результаты в соответствии с требованиями задачи );
4. Написать программу.

Задача:
В массиве, содержащем не более 21 числа, подсчитать среднее арифметическое для положительных элементов. Если среднее больше заданного числа, положительные элементы исходного массива уменьшить на это число, а отрицательные - увеличить. Найти максимальный элемент полученного массива и его номер. Формат числа +-цц.ц. Результаты распечатать в виде:

Исходный массив:
……………………………………………………
Заданное число …….……..
Среднее для положительных элементов ……..
Полученный массив
……………………………………………………
Номер максимума ….


Все остальные пункты я выполнил, а задача была на C++, но нам сказали переделать её под Builder. И вот я не знал как устроить заполнение массива, а после того как разобрался появилась проблема с его проверкой (не более 21). Вот описание элементов программы:

Edit1 - Ввод длины массива (при изменении этого поля программа выставляет количество столбцов в StringGrid 1)*
Edit2 - Ввод заданного числа
Edit3 - Среднее арифметическое для положительных элементов
Edit4 - Номер максимума
StringGrid1 - Ввод исходного массива
StringGrid2 - Вывод полученный массив
Button1 - Вычисление
Button2 - Выход из программы

* - Здесь тоже есть проблема, если удалить число из этого поля, то программа выведет ошибку, но в принципе это не столь страшно. Если поставить ноль, то ничего не изменится, ибо стандартно стоит 1 столбик (поскольку меньше нельзя).

LK, Flyer, все же спасибо вам за ответ )

Flayer, "N" - количество строк, и считывается с Edit1, а "z" - заданное число, которое берется из Edit2, а 5 стандартно столбцов я поставил ибо не мог решить вопрос, сколько оставить лучше и не возникнет ли ошибки если стандартно будет 2, а вбивать в Edit1 пользователь будет к примеру 5, но оказалось я напрасно волновался, теперь стандартно стоит 1 столбец. По поводу куска кода с проверкой я действительно лажанулся, ибо выходил бессмысленный отрывок с бесконечным циклом, из-за чего программа висла. Тут мне нечего сказать, мой феил . Смысл от этого цикла, как я уже упомянул выше, в том, что он проверяет введенное число в Edit1, и, в случае если оно больше 21, выводит сообщение, требующее заново ввести число, не превышающее 21. )
Миниатюры
Редактирование массива StringGrid в C++ Builder  
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.09.2011, 23:35
это мне напоминает:
- Продавец, у вас карандаш есть ?
- Вам для черчения?
- Нет, мне картину маслом рисовать задали...


Можно было с самого начала внятно сказать, что нужно, а не выкладывать в первом посту тот бред ?
0
 Аватар для Snake-CD
1 / 1 / 0
Регистрация: 18.09.2011
Сообщений: 5
19.09.2011, 17:53  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
это мне напоминает:
- Продавец, у вас карандаш есть ?
- Вам для черчения?
- Нет, мне картину маслом рисовать задали...


Можно было с самого начала внятно сказать, что нужно, а не выкладывать в первом посту тот бред ?
Конечно можно, но мы же не ищем легких путей ))
1
 Аватар для Arigami
1 / 1 / 0
Регистрация: 23.04.2010
Сообщений: 35
19.09.2011, 23:32
Вот я как-то для диплома писал она не высчитывает послед значение "я просто не помню куда засунул доделанную" но посмотри может что те поможет))
Вложения
Тип файла: rar Прога для диплома.rar (734.9 Кб, 95 просмотров)
0
0 / 0 / 0
Регистрация: 01.03.2021
Сообщений: 1
24.10.2021, 21:52
Snake-CD, здравствуйте,не составит ли труда скинуть проект архивом,очень нужно
0
25.10.2021, 10:00

Не по теме:

Цитата Сообщение от 3t3y6546 Посмотреть сообщение
Snake-CD, здравствуйте,не составит ли труда скинуть проект архивом,очень нужно
Если взглянуть на статистику в его профиле, то можно увидеть:
Последняя активность: 03.11.2011 21:23
Я бы не надеялся.

0
25.10.2021, 10:07

Не по теме:

Да даже будь он на форуме... Неужто такую чепуху 10 лет хранить?

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

Редактирование ячейки в StringGrid
Как сделать, чтобы при нажатии на ячейку StringGrid для редактирования в ней сразу выделился весь текст? И как убрать приподнятие текста...

Редактирование таблицы StringGrid
Всем доброго времени суток! Есть сложность с реализацией работы кнопки. Идея такая: -Есть Окно1(Первая форма) с таблицей и с...

Редактирование ячеек stringgrid
Возможно ли по клику на определенную ячейку StringGrid отредактировать строку которую она содержит?

Разрешить редактирование StringGrid-а
Есть массив, записанный в StringGrid, как сделать так, чтобы его можно было редактировать?

Редактирование строки в Stringgrid'e
Всем привет) Нужна такая вот помощь: 1) как сделать, чтобы при нажатии на кнопку &quot;Редактировать&quot; можно было редактировать...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru