Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
1

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

03.12.2013, 21:06. Показов 2226. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Найти произведение элементов массива, расположенных между первым и последним отрицательными элементами.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2013, 21:06
Ответы с готовыми решениями:

Вычислить сумму элементов массива, расположенных между первым и последним отрицательными элементами
НАИДИТЕ ОШИБКУ ПОЖАЛУИСТА! в одномерном массиве, состоящем из n вещественных элементов,...

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

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <math.h> #include...

Найти сумму элементов массива, расположенных между первым и вторым отрицательными элементами
Здравствуйте. Помогите пожалуйста составить программу, связанную с массивами, а то совсем не...

15
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:10 2
а что конкретно не получается?
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:13  [ТС] 3
Цитата Сообщение от МаксимТ Посмотреть сообщение
а что конкретно не получается?
Сделать последний цикл.
То есть...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 for(i=0; i<n;i++)
        {
        if (a[i]<min)
        { min=a[i];
        t=i; }
        }
// нашел индекс первого отрицательного элемента с начала 
        for(j=n; j>0;j--)
        {
        if (a[j]<max)
        { max=a[j];
        y=j; }
        }
// нашел индекс последнего отрицательного элемента с конца
а вот как найти произведение между ними, не могу понять
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:18 4
1. запоминать нужно не сами элементы а их индексы.
2.
C
1
for (i=t+1;i<y;i++)
1
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:21  [ТС] 5
Цитата Сообщение от МаксимТ Посмотреть сообщение
1. запоминать нужно не сами элементы а их индексы.
2.
C
1
for (i=t+1;i<y;i++)
я вроде бы индекс запоминаю...
цикл я понял, а суму записать как
C
1
S+=a[i] ?
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:25 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от reflection_mp3 Посмотреть сообщение
цикл я понял, а суму записать как
вот так:
Цитата Сообщение от reflection_mp3 Посмотреть сообщение
Код C
1
S+=a[i] ?
(если нужно всетаки произведение то вместо плюса *, и незабыть задать S начальное значение, если сумма то 0 если произведение то 1)

Добавлено через 1 минуту
C
1
for(j=n; j>0;j--)
еще этот цикл предположительно неправильный. индексация начинается с 0 . т.е. у последнего элемента будет индекс n-1
а в этом цикле начинается все с элемента n (который на единицу больше максимального)
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:30  [ТС] 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int i,j,S=1, a[10], min=0,max=0,t,y;
        for(i=0; i<n;i++)
        min=a[0];
 
        for(i=0; i<n;i++)
        {
        if (a[i]<min)
        { min=a[i];
        t=i; }
        }
 
        for(j=n; j>0;j--)
        {
        if (a[j]<max)
        { max=a[j];
        y=j; }
        }
        for(i=t+1;i<y;i++)
        {
        S*=a[i];
        }
Вообщем вот такой код, по сути все правильно, но при выводе результата выводи левые числа(

Добавлено через 1 минуту
Цитата Сообщение от МаксимТ Посмотреть сообщение
C
1
for(j=n; j>0;j--)
еще этот цикл предположительно неправильный. индексация начинается с 0 . т.е. у последнего элемента будет индекс n-1
а в этом цикле начинается все с элемента n (который на единицу больше максимального)
ну так поиск ведь с конца идет
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:43 8
Цитата Сообщение от reflection_mp3 Посмотреть сообщение
ну так поиск ведь с конца идет
и что?
по логике должен быть цикл такой:
C
1
for(j=n-1; j>=0;j--)//причем j - знаковый тип иначе цикл зависнет
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:46  [ТС] 9
Цитата Сообщение от МаксимТ Посмотреть сообщение
и что?
по логике должен быть цикл такой:
C
1
for(j=n-1; j>=0;j--)//причем j - знаковый тип иначе цикл зависнет
так тогда получается что последний элемент не будет вчитываться...
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:47 10
Цитата Сообщение от reflection_mp3 Посмотреть сообщение
Вообщем вот такой код, по сути все правильно, но при выводе результата выводи левые числа(
по обрывку сложно сказать почему такой результат. вероятную причину написал выше

Добавлено через 1 минуту
Цитата Сообщение от reflection_mp3 Посмотреть сообщение
так тогда получается что последний элемент не будет вчитываться...
a[n-1] - предположительно последний элемент(предположительно - потомучто я не вижу целиком код, а только обрывок)
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:49  [ТС] 11
Цитата Сообщение от МаксимТ Посмотреть сообщение
по обрывку сложно сказать почему такой результат. вероятную причину написал выше

Добавлено через 1 минуту

a[n-1] - предположительно последний элемент(предположительно - потомучто я не вижу целиком код, а только обрывок)
а что еще нужно увидеть?
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:50 12
Цитата Сообщение от reflection_mp3 Посмотреть сообщение
а что еще нужно увидеть?
полный код
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:51  [ТС] 13
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n=5;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
         Randomize     ();          
        Edit1 ->Text=IntToStr(n);
        StringGrid1 ->ColCount=n;
        for(int i=0; i<n;i++)       
                StringGrid1 ->Cells[i][0] = IntToStr(random(21)-10);
        Label3 ->Hide();
        Memo1 ->Hide();     
 
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try{
n=StrToInt(Edit1 ->Text);
 
        if(n>10||n<=1){
        ShowMessage("Значение не больше 10!");
        n=2;
        Edit1 ->Text = "";
        }
        StringGrid1 ->ColCount=n;
        for(int i=0; i<n;i++)
                StringGrid1 ->Cells[i][0]=IntToStr(random(20)-9);  }
                catch (EConvertError &e)
        {ShowMessage ("Ошибка!");
        return;}
        Label3 ->Hide();
        Memo1 ->Hide();
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1 -> Clear ();
int i,j,S=1, a[10], min=0,max=0,t,y;
        for(i=0; i<n;i++)
        a[i]=StrToInt(StringGrid1 ->Cells[i][0]);
        min=a[0];
 
        for(i=0; i<n;i++)
        {
        if (a[i]<min)
        { min=a[i];
        t=i; }
        }
 
        for(j=n; j>0;j--)
        {
        if (a[j]<max)
        { max=a[j];
        y=j; }
        }
        for(i=t+1;i<y;i++)
        {
        S*=a[i];
        }
        Memo1 -> Show();
        Label3 ->Show();
         Memo1 ->Lines->Add("Результат= "+IntToStr(S));
}
//---------------------------------------------------------------------------
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 21:56 14
как я и предполагал цикл поиска с конца - неверен (правильный цикл см. выше в моем посте )
0
1 / 1 / 0
Регистрация: 12.03.2013
Сообщений: 109
03.12.2013, 21:58  [ТС] 15
Результат не поменялся. Выводит "1"
0
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
03.12.2013, 22:03 16
C
1
a[i]=StrToInt(StringGrid1 ->Cells[i][0]);
под дебагом надо глянуть какой массив a

первым и последним отрицательными элементами.
в коде нету проверки на отрицательность.
также нету проверки на тот случай если минимума и максимума не будет (или будет ктото один, или между ними нету элементов)
0
03.12.2013, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2013, 22:03
Помогаю со студенческими работами здесь

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

Найти сумму элементов, расположенных между первым и последним положительными элементами массива
Отредактируйте, ничего не работает. Бесы берут!!!:wall: #include &lt;conio.h&gt; #include...

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru