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

Найти сумму элементов массива, расположенных между первым и последним нулевыми элементами

11.11.2024, 11:20. Показов 3391. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сделать задание пожалуйста, нужно написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. При создании оконного приложения скалярный (простой) результат выводить в виде компоненты Label, а массивы вводить и выводить с помощью компонент StringGrid. В одномерном массиве, состоящем из n вводимых с клавиатуры целых элементов, вычислить: Сумму элементов массива, расположенных между первым и последним нулевыми элементами.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2024, 11:20
Ответы с готовыми решениями:

Вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами
Написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. Предусмотреть возможность ввода данных как с...

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

Найти сумму элементов массива, расположенных между первым и последним нулем
Здравствуйте. Я, вроде бы написал программу, но она у меня почему-то не запускается, при чем безо всякой ошибки. Проверьте, пожалуйста,...

7
Модератор
 Аватар для D1973
9829 / 6371 / 2450
Регистрация: 21.01.2014
Сообщений: 27,101
Записей в блоге: 3
11.11.2024, 12:03
evbztmtyisa, а если таких (нулевых) элементов нет - что тогда?

Добавлено через 2 минуты
и еще вопрос: сами будете что-нибудь делать или просто халявы хотите хапнуть?
0
0 / 0 / 0
Регистрация: 11.11.2024
Сообщений: 3
11.11.2024, 22:05  [ТС]
были попытки сделать самостоятельно:
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int sum = 0;
int firstZeroIndex = -1;
int lastZeroIndex = -1;
int arr[n];
for (int i = 0; i < n; i++) {
    StringGrid1->Cells[0][i + 1] = IntToStr(i + 1);
    arr[i] = StrToInt(StringGrid1->Cells[1][i + 1]);
    if (arr[i] == 0) {
        if (firstZeroIndex == -1) {
            firstZeroIndex = i;
        }
        lastZeroIndex = i;
    }
}
 
for (int i = 0; i < n; ++i)
{
if (arr[i] == 0)
{ if (firstZeroIndex == -1)
{ firstZeroIndex = i;
}
lastZeroIndex = i;
}
}
 
 if (firstZeroIndex != -1 && lastZeroIndex != -1 && firstZeroIndex < lastZeroIndex)
 { for (int i = firstZeroIndex + 1; i < lastZeroIndex; ++i)
  { sum += arr[i];
 
  }
        Memo1->Lines->Add(" сумма= "+FloatToStr(sum));
 
 
 }
каждый раз как я пытаюсь исправить что-то, появляются новые ошибки вместо предыдущих если нет нулевых элементов наверное просто сообщением указать, мне бы хоть чтоб посчитало, когда они есть
0
Модератор
 Аватар для D1973
9829 / 6371 / 2450
Регистрация: 21.01.2014
Сообщений: 27,101
Записей в блоге: 3
12.11.2024, 07:41
Одного текста обработчика нажатия кнопки Button2 тут недостаточно:
1. непонятно, что такое, например, n, где объявлена, как инициализирована.
2. то же самое и с arr[].
3. как на форме располагается StringGrid?
4. ошибки не показали, опять же...

Пункт 3 я не просто так указал - есть нюанс. Индексация в TStringGrid следующая: первый индекс - номер столбца, второй - номер строки. Поэтому, либо у Вас массив в столбик записывается, либо ошибка будет выхода за границы диапазона сетки строк. Это надо учитывать.

Попробуйте исправить сами...

если совсем не вмоготу...

Слабак!

*.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Grids.hpp>
#include <Vcl.Samples.Spin.hpp>
 
#include <System.Math.hpp>
 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TLabel *Label1;
    TButton *Button1;
    TStringGrid *StringGrid1;
    TSpinEdit *SpinEdit1;
    TLabel *Label2;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall SpinEdit1Change(TObject *Sender);
    void __fastcall FormDestroy(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
    int N; //число элементов массива
    int *A; //динамический массив
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
*.cpp
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
78
79
80
81
82
83
84
85
86
87
88
89
90
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Процедура перенумерации шапки таблицы
void Renum(TStringGrid *G)
{
    for(int i = 0; i < G->ColCount; i++)
       G->Cells[i][0] = i;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//************************************************************
   StringGrid1->RowCount = 2;
   StringGrid1->ColCount = 10;
   StringGrid1->FixedCols = 0;
   StringGrid1->FixedRows = 1;
   StringGrid1->DefaultColWidth = 32;
   StringGrid1->DefaultColAlignment = taCenter;
   StringGrid1->Options = StringGrid1->Options << goEditing;
 
   SpinEdit1->MinValue = 2;
   SpinEdit1->MaxValue = 30;
   SpinEdit1->Value = 10;
 
   Label1->Caption = "";
 
   Button1->Caption = "Ответ";
//************************************************************
//Все вышенаписанное проще всего выставить руками в Object Inspector
 
   N = SpinEdit1->Value; //начальное значение числа элементов массива
   Renum(StringGrid1); //перенумерация шапки таблицы
   A = new int[N]; //выделим память под массив
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpinEdit1Change(TObject *Sender)
{
   N = SpinEdit1->Value; //новое значение числа элементов массива
   StringGrid1->ColCount = N; //выставление числа ячеек StringGrid
   Renum(StringGrid1); //перенумерация шапки таблицы
   delete [] A; //удалим массив, очистив память
   A = new int[N]; //выделим новый объем памяти под массив
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
   delete [] A; //удалим массив, очистив память при завершении программы
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int firstZeroIndex = -1, lastZeroIndex = -1;
//Заполним массив значениями из сетки строк
   for(int i = 0; i < N; i++) {
//если в очередной ячейке нечисловое значение, то
      if(!TryStrToInt(StringGrid1->Cells[i][StringGrid1->FixedRows], A[i])) {
          ShowMessage(String().sprintf(L"Ошибочное значение в ячейке %d", i)); //сообщаем об этом
          return; //выходим
      }
//тут же определяем индексы первого и последнего нуля
      if(A[i] == 0)
         firstZeroIndex == -1 ? firstZeroIndex = i : lastZeroIndex = i;
   }
//если в массиве нет нулей
   Label1->Caption = firstZeroIndex == -1 ? "Массив не содержит ни одного нуля" : "";
   if(Label1->Caption != EmptyStr) return;
//если в массиве 1 нуль
   Label1->Caption = lastZeroIndex == -1 ? "Массив содержит только один нуль" : "";
   if(Label1->Caption != EmptyStr) return;
//есть 2 нуля - считаем сумму элементов
   int Summ = 0;
   for(int i = firstZeroIndex + 1; i < lastZeroIndex; i++)
      Summ += A[i];
   Label1->Caption = String().sprintf(L"Сумма элементов = %d", Summ);
}
//---------------------------------------------------------------------------



0
0 / 0 / 0
Регистрация: 11.11.2024
Сообщений: 3
19.11.2024, 22:18  [ТС]
совсем забыл поблагодарить! что-то у вас взял, что-то от себя, в итоге получилось, что нужно, не знаю даже, в чем ошибка была, просто все подряд менял, пока не вышло, что нужноXD спасибо!
0
Модератор
 Аватар для D1973
9829 / 6371 / 2450
Регистрация: 21.01.2014
Сообщений: 27,101
Записей в блоге: 3
20.11.2024, 06:48
Цитата Сообщение от evbztmtyisa Посмотреть сообщение
в итоге получилось, что нужно
0
20.11.2024, 16:46

Не по теме:

Такое ощущение что писало три разных человека....вверху поопытнее, возможно чела c# или с++ обычного =))))

Миниатюры
Найти сумму элементов массива, расположенных между первым и последним нулевыми элементами  
0
 Аватар для Dinkin
768 / 554 / 134
Регистрация: 31.05.2013
Сообщений: 3,099
Записей в блоге: 3
20.11.2024, 16:48
вот
Миниатюры
Найти сумму элементов массива, расположенных между первым и последним нулевыми элементами  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2024, 16:48
Помогаю со студенческими работами здесь

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

Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Задание: В одномерном массиве, состоящем из n вводимых с клавиатуры целых элементов, вычислить сумму элементов массива, расположенных между...

Вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Спроектировать, создать и протестировать приложение по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. ...

Найти сумму элементов массива, расположенных между первым и последним нулевыми элементами
. В одномерном массиве, состоящем из n вещественных элементов, вычислить: • произведение элементов массива с чётными номерами; • сумму...

Найти сумму элементов массива, расположенных между первым и последним нулевыми элементами
В одномерном массиве, состоящем из n целых элементов, вычислить: 2) сумму элементов массива, расположенных между первым и последним...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
Как работать с куки в ASP.NET Core
UnmanagedCoder 04.06.2025
Когда я впервые начал работать с куки в ASP. NET Core, меня поразило, насколько отличается работа с ними от классического ASP. NET. В Core все стало более декомпозированным - больше нет удобного. . .
Рисование коллайдеров физического движка Box2D-WASM v3 на Three.js
8Observer8 04.06.2025
Erin Catto (автор Box2D) переписал с нуля Box2D v2 с С++ на Си и появилась версия Box2D v3. Birch-san собрал Box2D v3 в WebAssembly (WASM), чтобы можно было использовать Box2D v3 на JavaScript. В. . .
Worker Threads и многопоточность в Node.js
Reangularity 03.06.2025
Если вы когда-нибудь посещали собеседования на позицию Node. js разработчика, почти наверняка слышали заезженную фразу: "Node. js - однопоточная платформа". Звучит как неоспоримый факт, который. . .
Event-Driven CQRS на C# с паттерном Outbox
stackOverflow 03.06.2025
В традиционной модели происходит примерно следующее: вы получаете команду, обрабатываете ее, сохраняете результат в базу данных и затем пытаетесь опубликовать событие в брокер сообщений. Но что если. . .
OwenLogic: перенос сетевых переменных в панель Weintek (EasyBuilder Pro)
ФедосеевПавел 03.06.2025
ВВЕДЕНИЕ ПЕРЕД ЭКСПЕРИМЕНТАМИ - СОЗДАЙТЕ РЕЗЕРВНЫЕ КОПИИ ПРОЕКТОВ На момент написания статьи (02 июня 2025 г. ) самыми актуальными версиями ПО являются: OwenLogic v. 2. 10. 366 EasyBuilder Pro. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »