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

Визуальное программирование. Одномерный массив.

03.12.2010, 11:46. Показов 3330. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание. Как делать его для выполнения в командной строке более-менее понятно. А вот с визуальным есть проблемы.Сам студент, учусь только.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1)максимальный элемент массива;
2)сумму элементов массива, расположенных до последнего положительного элемента.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,b]. Освободившиеся в конце массива элементы заполнить нулями.

Вот код, что есть:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
// выводятся числа массива
 ListBox1->Items->Add(Edit1->Text);
 Edit1->Text="";
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
ListBox1->Items->Clear();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
ListBox1->Items->Delete(ListBox1->ItemIndex);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//максимальный элемент массива
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//сумма элементов массива, расположенных до последнего положительного элемента.
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,b]. Освободившиеся в конце массива элементы заполнить нулями.
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
//ввести a
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit3Change(TObject *Sender)
{
//ввести b
}
//---------------------------------------------------------------------------
Помогите, пожалуйста, а то сам не разберусь. И методички нет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2010, 11:46
Ответы с готовыми решениями:

визуальное программирование
Трассировка, разбиение и размещение графов в визуальном

визуальное программирование на С++
1.дан текстовый файл формата: n1 x1 y1 x2 y2 где n=0,если (x1,y1-x2,y2)координаты отрезка n=1,если (x1,y1-x2,y2)координаты...

Перевод String^ в массив типа char (визуальное программирование)
Перевод String^ в массив типа char(визуальное программирование) У меня в обработчике событий кнопки есть объект типа String^, который...

10
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
03.12.2010, 22:56
Как делать его для выполнения в командной строке
Может в консоли?
1)максимальный элемент массива;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int A[50]={0};
int m=-1,k=-1;
 for (int j=0;j<50;j++)//заполняем массив
 {
  A[j]=random(101)-30;// от -30 до +70
 }
m=A[0];//запоминаем значение первой ячейки
 for (int j=1;j<50;j++)//проверяем массив
 {
  if (A[j]>m)//если следующая больше
  {
   m=A[j];//запоминаем
//   k=j;//и номер ячейки
  }
 }
 Memo1->Lines->Add(IntToStr(m));
// Memo1->Lines->Add(IntToStr(k));
}
Добавлено через 27 минут
2)сумму элементов массива
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int A[50]={0};
int s=0,k=-1;
 for (int j=0;j<50;j++)//заполняем массив
 {
  A[j]=random(101)-30;// от -30 до +70
 }
 for (int j=49;j>0;j--)//последний положительный
 {
  if (A[j]>0)//если больше нуля
  {
   k=j;//запоминаем номер ячейки
   goto L;//и выходим из цикла
  }
 }
L:
if (k>=0)//возможно все отрицательные
{
 for (int j=0;j<k;j++)//
 {
  s=s+A[j];//
 }
 Memo1->Lines->Add(IntToStr(s));//вывод суммы
// Memo1->Lines->Add(IntToStr(k));
}
else Memo1->Lines->Add("vse < 0");
}
1
0 / 0 / 1
Регистрация: 03.12.2010
Сообщений: 6
06.12.2010, 14:20  [ТС]
Может и в консоли.. одна хрень )
Спасибо. Сейчас буду пробовать

Добавлено через 1 час 9 минут
По поводу максимального элемента
Вот код, немного под свою программу переделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int A[30]={0};
int m,k ;
 
 for (int j=0;j<30;j++)//заполняем массив
 
  A[j]=StrToInt(ListBox1->Items->Strings[j]   );
 
m=A[0];//запоминаем значение первой ячейки
 for (int j=1;j<30;j++)//проверяем массив
 {
  if (A[j]>m)//если следующая больше
  {
   m=A[j];//запоминаем
   k=j;//и номер ячейки
  }
 }
 Label4->Caption= "Максимальный элемент массива=" +IntToStr(m);
 Label9->Caption = "И его индекс: " +IntToStr(k);
 
}
так вроде работает, но при наличии 30 элементов, а если меньше, то ошибка.. говорит, что мало элементов.. что-то типа того.. можно ли эту проблемку решить?
и может еще как-то подкорректировать код?

Добавлено через 47 минут
по условию надо так
В одномерном массиве, состоящем из n вещественных элементов, но не меньше 30.. но чтобы еще и считало те элементы, которые будут после 30


Добавлено через 18 минут
И вот написал на сумму элементов, до последнего положительного..
Тоже немного переделал, но ошибка все та же.. с количеством элементов.
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int  A[30]={0};
int s=0,k=-1;
 for (int j=0;j<30;j++)//заполняем массив
 
  A[j]=StrToInt(ListBox1->Items->Strings[j]);
 
 for (int j=30;j>0;j--)//последний положительный
 {
  if (A[j]>0)//если больше нуля
  {
   k=j;//запоминаем номер ячейки
   goto L;//и выходим из цикла
  }
 }
L:
if (k>=0)//возможно все отрицательные
{
 for (int j=0;j<k;j++)//
 {
  s=s+A[j];//
 }
Label5->Caption="Сумма элементов массива "+IntToStr(s);
// Memo1->Lines->Add(IntToStr(k));
}
else Label10->Caption= "Все элементы < 0" ;
 
}
0
0 / 0 / 1
Регистрация: 03.12.2010
Сообщений: 6
07.12.2010, 16:57  [ТС]
Считает только 30 элементов.. не больше, не меньше.
Подскажите, пожалуйста, что сделать, чтобы считало больше, чем 30 элементов?

Массив создается в ListBox1
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
08.12.2010, 19:10
так вроде работает, но при наличии 30 элементов, а если меньше
Проще использовать динамический массив
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int t=ListBox1->Items->Count;
//Memo1->Lines->Add(IntToStr(t));//всего элементов
int *A = new int [t];
int m=-1;//,k=-1;
 for (int j=0;j<t;j++)//заполняем массив
 {
  //A[j]=random(101)-30;// от -30 до +70
  A[j]=StrToInt(ListBox1->Items->Strings[j]);
 }
m=A[0];//запоминаем значение первой ячейки
 for (int j=1;j<t;j++)//проверяем массив
 {
  if (A[j]>m)//если следующая больше
  {
   m=A[j];//запоминаем
//   k=j;//и номер ячейки
  }
 }
 Memo1->Lines->Add(IntToStr(m));
// Memo1->Lines->Add(IntToStr(k+1));
delete[]A;//и удаляем массив
A=NULL;
Добавлено через 14 минут
Leksss, почитай про массивы,ListBox и Strings и переделай вторую задачу
C++
1
2
int  A[30]={0};//создаём 30 ячеек. массив с 0 начинается
 for (int j=29;j>=0;j--)//и максимальная 29-я
1
5 / 5 / 0
Регистрация: 07.12.2008
Сообщений: 8
08.12.2010, 19:39
Не обязательно использовать динамические массивы. Можно описать массив заведомо больший, чем может понадобиться. Например,
int A[100];
а размер массива задать в Edit:
int n = StrToInt(Edit1->Text);
или количекством записей в ListBox (пример не приведу - свойство не помню, а Builder-а на домашней машине нету((( ).
Тогда во всех циклах надо заменить 30 на n.
Должно работать! :-)
2
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
08.12.2010, 20:15
Можно описать массив заведомо больший, чем может понадобиться.
Для данной задачи это подойдёт. Но неиспользованные ячейки будут зря память занимать, и если массив очень большой, он в стек не влезет.
2
0 / 0 / 1
Регистрация: 03.12.2010
Сообщений: 6
09.12.2010, 18:09  [ТС]
Спасибо большое. Завтра, с новыми силами, буду опять "грызть гранит"
О результате напишу.

Добавлено через 15 часов 59 минут
Так. С этими заданиями разобрался. Вроде все работает, как надо.
Даже сам разобрался с 3-м заданием:
"Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,b]. Освободившиеся в конце массива элементы заполнить нулями."
Правда, удаляет не по модулю и нули появляются не в конце массива, а на месте элементов.. но работает.

Теперь работаю над 4-м заданием:
"Построить график зависимости значения элемента от индекса массива, выделив разными цветами минимальное и максимальное значение".
Разбираюсь с Chart-ом (показалось, что будет легче, чем с Image-ом).. как я понимаю, там надо будет использовать два графика Series1 и Series2, то есть max и min значение, выделив разными цветами. Ось Ох = "Индекс элемента"; а Оу = "Значение элемента";

И есть еще вопросик. Подскажите, пожалуйста.
У меня массив с ListBox1 сохраняется в файл .dat при нажатии кнопки.
Как сделать, чтобы, если файл сохранен, то при открытии программы этот массив уже был введен в ListBox1, а если файла нет, то вводить вручную?

Если на форме пишу ListBox1->Items->LoadFromFile("File.dat");
то появляется ошибка, если файла нет.

Добавлено через 1 час 35 минут
На графике и остановился.. читал по нему темы.. но что-то все равно не понятно.
Если использовать AddXY, то по идее, должна создаваться точка.
А как потом, чтобы еще точки, но с другими значениями и в результате линия?
И, по идее, надо построить график зависимости элементов от их индекса.. а как - даже не имею представления.. это же надо с ListBox1, по ходу, работать..
Подскажите, пожалуйста
Тут вот рисовал от руки график.. Индекс ниже нуля быть не может. Т.к. индекс у меня идет по Ох, то 2-я и 3-я четверть отпадают. Мысли разные есть.. но не могу собрать в кучу их.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
10.12.2010, 00:00
а если файла нет, то вводить вручную
проверка на наличие файла

Добавлено через 3 часа 34 минуты
к 3-ей задаче
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
#include <math.h> //для модуля
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int a=2,b=5;
//и заполнение массива
//-----
 for (int j=0;j<t-1;j++)//проверяем массив
 {
 
  if (abs(A[j])>a && abs(A[j])<b)
  {
   for (int i=j;i<t-1;i++) A[i]=A[i+1];//смещаем массив
   A[t-1]=0;//и обнуляем последний
   j--;//чтоб 2-й раз проверила ячейку
  }
 }
 for (int j=0;j<t;j++)//
 {
  Memo1->Lines->Add(IntToStr(A[j]));//вывод для проверки
 }
 
delete[]A;//и удаляем массив
A=NULL;}
1
0 / 0 / 1
Регистрация: 03.12.2010
Сообщений: 6
10.12.2010, 13: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
{
int t=ListBox1->Items->Count;
int *A = new int [t];
int a,b,j;
a=StrToInt(Edit2->Text);
b=StrToInt(Edit3->Text);
 
  for (int j=0;j<t;j++)
  {
  A[j]=StrToInt(ListBox1->Items->Strings[j]); // заполнение массива
 }
for(j=0;j<t-1;j++)
{
//
if (abs(A[j])>=a && abs(A[j])<=b) // эта строка с ошибкой
//
  {
   for (int i=j;i<t-1;i++) A[i]=A[i+1];  //смещаем массив
   A[t-1]=0; //и обнуляем последний
   j--;  //чтоб 2-й раз проверила ячейку
  }
 for (int j=0;j<t;j++)//
 {
  Memo1->Lines->Add(IntToStr(A[j]));  //вывод для проверки
 }
 
delete[]A; //и удаляем массив
A=NULL;
}
}
При выполнении этого условия, программа останавливается на выделенной строке (на 16), выдает ошибку.
В Мемо1 записывает массив другой, не тот, что должен быть в интервале. Библиотеку я добавил.
Где я ошибся?

Добавлено через 14 минут
О! Ща.. сек..

Добавлено через 7 минут
Вот код..

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
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int t=ListBox1->Items->Count;
int *A = new int [t];
int a,b,j,q;
a=StrToInt(Edit2->Text);
b=StrToInt(Edit3->Text);
 
  for (int j=0;j<t;j++)
  {
  A[j]=StrToInt(ListBox1->Items->Strings[j]);
 }
for(j=0;j<t;j++)
{
if((A[j]>=a) && (A[j]<=b))
  {
   for (int i=j;i<t-1;i++) A[i]=A[i+1];//смещаем массив
   A[t-1]=0;
   j--;
   ListBox1->Items->Clear();
   for(j=0;j<t;j++)
   ListBox1->Items->Add(A[j]);
  }
 
}
}
Сейчас заменяются элементы 0-ми и смещаются вниз (правда, сколько элементов в интервале, столько раз надо и клацнуть, но работает )
В том ошибка выскакивала из-за
C++
1
2
delete[]A; //и удаляем массив
A=NULL;
Добавлено через 1 минуту
Теперь остался только график.

Добавлено через 10 часов 17 минут
Помогите, пожалуйста, с графиком.
Читал статьи и темы про графики, про TChart.. хелп тоже смотрел.. вроде и понятно, но ничего не понятно
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::Button10Click(TObject *Sender)
{
double t=ListBox1->Items->Count;
double *A = new double [t];
double X,Y;
Form1->Chart1->Series[0]->Clear();
 
 for (int j=0;j<t;j++)//заполнение массива
 {
  A[j]=StrToInt(ListBox1->Items->Strings[j]);
 }
 
for (int j=0;j<t;j++)
{
 
Y=StrToInt(ListBox1->ItemIndex ); //индек элементов
X=StrToInt(ListBox1->Items->Values(); //примерно как-то так.. значение елементов
Form1->Chart1->Series[0]->AddXY(X,Y) ;
 
}
}
Задание: "Построить график зависимости значения элемента от индекса массива, выделив разными цветами минимальное и максимальное значение".
Мне хотя бы просто построить. Подскажите, пожалуйста
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
11.12.2010, 23:05
Наверно с Chart'ом было бы проще.
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
void __fastcall TForm1::Button11Click(TObject *Sender)
{
int t=ListBox1->Items->Count;
int *A = new int [t];
int m=-1,k=-1;
 for (int j=0;j<t;j++)//заполняем массив
 {
  A[j]=StrToInt(ListBox1->Items->Strings[j]);
 }
Image3->Canvas->MoveTo(10,10);//строим оси//Image 360*500
Image3->Canvas->LineTo(10,350);
Image3->Canvas->MoveTo(10,180);
Image3->Canvas->LineTo(490,180);
 
 for (int j=0;j<t;j++)//строим график
 {
  Image3->Canvas->Rectangle(j*10+10,180,j*10+15,180-A[j]*10);
 }
 
m=A[0];//запоминаем значение первой ячейки
 for (int j=1;j<t;j++)//проверяем массив
 {
  if (A[j]>m)//если следующая больше
  {
   m=A[j];//запоминаем
   k=j;//и номер ячейки
  }
 }
Image3->Canvas->Brush->Color=clRed;
Image3->Canvas->Rectangle(k*10+10,180,k*10+15,180-A[k]*10);//max
 
m=A[0];//запоминаем значение первой ячейки
 for (int j=1;j<t;j++)//проверяем массив
 {
  if (A[j]<m)//если следующая меньше
  {
   m=A[j];//запоминаем
   k=j;//и номер ячейки
  }
 }
Image3->Canvas->Brush->Color=clBlue;
Image3->Canvas->Rectangle(k*10+10,180,k*10+15,180-A[k]*10);//min
 
delete[]A;//и удаляем массив
A=NULL;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2010, 23:05
Помогаю со студенческими работами здесь

Программирование. Дан одномерный массив А, сформировать B
Дан одномерный массив A. Сформировать новый массив B того же размера по следующему правилу: элемент {B}_{k} равен сумме элементов...

Визуальное программирование
Помогите пожалуйста выполнить задание: Разработайте программу на языке С++, используя визуальное программирование. Вариант 19....

Визуальное программирование
Ребята, помогите пожалуйста разобраться в визуальном программировании. Скоро диплом... Хотел бы сделать программу сортировки данных, или...

Визуальное программирование
Здравствуйте, помогите пожалуйста! Составить программу, демонстрирующую работу с изменением содержания файла и перезаписи данных в файл. ...

Визуальное программирование
Создаю программу для работы с БД(ADO &gt; MS Access) - требуется реализовать не только и не столько редактор скрипта для выполнения SQL...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru