Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Best-pm07
..:::BesT:::..
7 / 7 / 1
Регистрация: 19.03.2009
Сообщений: 195
#1

Перевод из Pascal. Одномерный массив (сумма, произведение) - C++

11.06.2010, 08:42. Просмотров 688. Ответов 15
Метки нет (Все метки)

программа вычисляет:
1) произведение отрицательных элементов массива
2) сумму положительных элементов массива, расположенных до максимального элемента
Нужен только всего лишь перевод на С++, прошу помощи

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var a:array[1..100] of integer;
    n,i,sum,mult:integer;
    max:byte;
begin
write('n = ');
readln(n);
for i:=1 to n do
  read(a[i]); {ввод через пробел}
mult:=1;
max:=0;
for i:=1 to n do
  begin
    if a[i]<0 then mult:=mult*a[i];
    if a[i]>max then max:=i;
  end;
sum:=0;
for i:=1 to max-1 do {(max-1) если максимальный элемент не включаем, иначе до max}
  if a[i]>0 then sum:=sum+a[i];
writeln('произведение отрицательных элементов: ',mult);
writeln('сумма положительных до макс: ', sum);
readln;
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2010, 08:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод из Pascal. Одномерный массив (сумма, произведение) (C++):

Одномерный массив, сумма и произведение элементов - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1)Сумму положительных элементов массива 2)Произведение...

Одномерный массив (произведение последних членов, сумма которых будет не больше чем число С) - C++
ребята, помогииите))) для одномерного массива А(n) найти произведение последних членов этого массива, сумма которых будет не больше чем...

Заменить произведение на одномерный массив - C++
В матрице А(5,6) а) Получить одномерный массив, элементы которого равны произведению элементов каждой строки заданной матрицы ...

Одномерный массив (количество и сумма элементов) - C++
Помогите сделать)) Для одномерного массива А (n) найти количество и сумму элементов А (n), которые удовлетворяют условию 6 &lt;= А (n) &lt;=...

Одномерный массив. Найти произведение элементов с четными индексами - C++
Дан массив целых чисел из n элементов. Найти произведение элементов с четными индексами. Найти среднее арифметическое положительных...

Массив: сумма / произведение элементов / преобразование массива - C++
В одномерном массиве, состоящем из целочисленных элементов, вычислить: • произведение элементов массива с четными номерами; • сумму...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
11.06.2010, 10:23 #2
А что сдесь сложного?О_о
0
Best-pm07
..:::BesT:::..
7 / 7 / 1
Регистрация: 19.03.2009
Сообщений: 195
11.06.2010, 11:33  [ТС] #3
действительно, но для кого как
кому не сложно...
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
11.06.2010, 11:43 #4
Я думаю самый понятный способ:

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
#include <iostream>
 
int main ()
{
    // initial
    const int size=10;
    int MAS[size];
    // fill
    for (int i=0; i<size; i++) {
        std::cout << "MAS["<< i <<"]: ";
        std::cin >> MAS[i]; }
 
    long product=1;
    int sum=0;
    int max=0, index_max;
    // search product
    for (int i=0; i<size; i++)
        if (MAS[i]<0) product*=MAS[i];
    // search max element
    for (int i=0; i<size; i++)
        if (MAS[i]>max) {
            max=MAS[i];
            index_max=i; }
    // search sum
    for (int i=0; i<index_max; i++)
        sum+=MAS[i];
    // output
    std::cout << "Product: " << product;
    std::cout << std::endl;
    std::cout << "Sum: " << sum;
    std::cout << std::endl;
 
    system ("pause");
    return 0;
}
1
//Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
11.06.2010, 11:59 #5
вот еще посмотриш:
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
#include <iostream>
#include<clocale>
using namespace std;
int main()
{setlocale(LC_ALL, "rus");
int n,i,sum,mult,pos;
int a[100];
        cout << "n=";
        cin>>n;
        for(i=0; i<=n-1; i++)
        {
            cin>>a[i];
        }
        mult=1;
    int max=0;
    sum=0;
        for(i=0; i<=n-1; i++)
        {
            if(a[i]<0)
                mult=mult*a[i];
        
            if(a[i]>max)
            {
                max=a[i];
            pos=i;
            }
        }
            for(i=0; i<=pos-1; i++)
            {
                if (a[i]>0) 
                    sum+=a[i];}
 
            cout<<"произведение отрицательных элементов: "<<mult;
            cout<<"\n";
            cout<<"сумма положительных до макс: "<<sum;
 
    return 0;
}
1
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
11.06.2010, 12:16 #6
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
#include <iostream.h>
 
int main()
{
   int arr[100];
   int size, sum, mul, max, max_ind;
   
   do
   {
      cout << "Введите размер массива, не больше 100: ";
      cin >> size;
   }while (size > 100 || size <= 0);
   
   for (int i = 0; i < size; i++)
   {
      cout << "Введите a[" << i << "]: ";
      cin >> arr[i];
   }
   mul = 1;
   sum = 0;
   max = arr[0];
   max_ind = 0;
   for (int i = 0; i < size; i++)
   {
      if (a[i] < 0)
         mul *= arr[i];
      if (a[i] > max)
      {
         max = a[i];
         max_ind = i;
      }
   }
   for (int i = 0; i < max_ind; i++)
      if (a[i] > 0)
         sum += a[i];
   cout << "Произведение отрицательных элементов - " << mul << endl;
   cout << "Сумма положительных элементов до макс. - " << sum << endl;
   return 1;
}
1
Best-pm07
..:::BesT:::..
7 / 7 / 1
Регистрация: 19.03.2009
Сообщений: 195
11.06.2010, 12:34  [ТС] #7
Всем спасибо
у //Александр правильно все считает, у neske считает, но не во всех случаях
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
11.06.2010, 13:23 #8
Введите n>100, посомтрим что будет. Я про код //Александр
0
Inadequate
Retired
7706 / 2539 / 183
Регистрация: 17.10.2009
Сообщений: 5,106
11.06.2010, 13:33 #9
neske, //Александр, kazak, а если в массиве не будет вообще отрицательных ?

Вообще код на паскале имеет тот же недочет, который есть в ответах выше. Да и вообще это программа на один цикл. Вот вариант на паскале
Pascal
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
uses
  Crt;
const
  N = 5;
var
  a: array [1..N] of integer;
  i,sum,pr,max,tmp: integer;
  f: boolean;
begin
  ClrScr;
  Randomize;
  f := true;
  max := 1;
  sum := 0;
  tmp := 0;
  WriteLn('Array:');
  for i := 1 to N do
  begin
    a[i] := Random(8) + 4;
    if a[i] < 0 then
    begin
      if f then
        f := false;
      pr := pr * a[i];
    end;
    if a[i] > a[max] then
    begin
      max := i;
      Inc(sum, tmp);
      tmp := 0;
    end;
    Inc(tmp, a[i]);
    Write(a[i], ' ');
  end;
  if not f then
    WriteLn(#10, 'Product: ', pr)
  else
    WriteLn(#10, 'Product: none');
  WriteLn('Max - a[', max, '] = ', a[max], #10, 'Sum: ', sum);
  ReadLn;
end.
А вот на с++
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
#include <iostream>
 
int main()
{
    int max = 0, sum = 0, pr = 1, tmp = 0, n;
    bool f = 1;
 
    std::cin >> n;    
    int a[n];
    for (int i = 0; i < n; i++)
    {
        std::cin >> a[i];
        if (a[i] < 0)
        {
            if (f) f = 0;
            pr *= a[i];
        }
        if (a[i] > a[max])
        {
            max = i;
            sum += tmp;
            tmp = 0;
        }
        tmp += a[i];
    }
    
    if (f) std::cout << "\nProduct: none";
    else std::cout << "\nProduct: " << pr;
    std::cout << "\nMax: " << a[max] << "\nSum: " << sum << std::endl; 
    
    system("pause");
    return 0;    
}
1
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
11.06.2010, 13:49 #10
Цитата Сообщение от Inadequate Посмотреть сообщение
std::cin >> n;
int a[n];
Несколько не ожиданно

Цитата Сообщение от Inadequate Посмотреть сообщение
if (a[i] > a[max])
{
max = i;
sum += tmp;
tmp = 0;
}
tmp += a[i];
Оригинально, но суммирует все подряд числа, а требуется только положительные
Но за идею спасибо
1
Inadequate
Retired
7706 / 2539 / 183
Регистрация: 17.10.2009
Сообщений: 5,106
11.06.2010, 13:57 #11
kazak, а в чем неожиданность ? Объясни пожалуйста, а я если что-то не так приму к сведению.

kazak, пардон, про положительные я просмотрел чуток ну исправить до нужного совсем несложно, поэтому такие мелочи я исправлять не буду.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
11.06.2010, 14:00 #12
Цитата Сообщение от Inadequate Посмотреть сообщение
kazak, а в чем неожиданность ? Объясни пожалуйста, а я если что-то не так приму к сведению.
Вроде как размер статического массива должен быть известен компилятору на стадии компиляции. Мне конечно приходилось сталкиватся с таким случаем на Dev-C++, но остальные компиляторы всетаки придерживаются традиций и выдают ошибки.
1
Inadequate
Retired
7706 / 2539 / 183
Регистрация: 17.10.2009
Сообщений: 5,106
11.06.2010, 14:05 #13
kazak, да, действительно проверял на Dev-C++. Я учту вышесказанное, спасибо.
0
neske
1495 / 862 / 82
Регистрация: 26.03.2010
Сообщений: 2,951
11.06.2010, 14:16 #14
Цитата Сообщение от Inadequate Посмотреть сообщение
neske, //Александр, kazak, а если в массиве не будет вообще отрицательных ?
Программа выведет в консоль сообщение о том, что произведенеи равно единице (;
0
Inadequate
Retired
7706 / 2539 / 183
Регистрация: 17.10.2009
Сообщений: 5,106
11.06.2010, 14:22 #15
neske, шутку оценил, но только так быть не должно.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2010, 14:22
Привет! Вот еще темы с ответами:

Получить одномерный массив, хранящий произведение элементов восходящих диагоналей матрицы - C++
Решить задачу используя указатель на указатель Дана матрица размерности nxn. Получить одномерный массив, хранящий произведение элементов...

Одномерный массив. Произведение значений между первым и вторым нулевыми элементами - C++
Условие: В одномерном массиве перемножить элементы которые стоят между первым и вторым нулевыми элементами массива. Условие я выполнил,...

Одномерный массив. Определить произведение элементов между первым и последим нулями. - C++
Здрасте) Помогите пожалуйста 2. Описать функции ввода с клавиатуры элементов одномерного массива и определения произведения его...

Найти произведение отрицательных элементов каждого столбца матрицы и записать их в одномерный массив - C++
Дана матрица H . Найти произведение отрицательных элементов каждого столбца матрицы и записать их в одномерный массив B.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.06.2010, 14:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru