Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Best-pm07
..:::BesT:::..
7 / 7 / 5
Регистрация: 19.03.2009
Сообщений: 195
#1

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

11.06.2010, 08:42. Просмотров 725. Ответов 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.

http://www.cyberforum.ru/cpp-beginners/thread1200713.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2010, 08:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перевод из Pascal. Одномерный массив (сумма, произведение) (C++):

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

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

Одномерный массив (количество и сумма элементов)
Помогите сделать)) Для одномерного массива А (n) найти количество и сумму...

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

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

15
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
11.06.2010, 10:23 #2
А что сдесь сложного?О_о
0
Best-pm07
..:::BesT:::..
7 / 7 / 5
Регистрация: 19.03.2009
Сообщений: 195
11.06.2010, 11:33  [ТС] #3
действительно, но для кого как
кому не сложно...
0
neske
1526 / 893 / 191
Регистрация: 26.03.2010
Сообщений: 3,073
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 / 2
Регистрация: 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
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 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 / 5
Регистрация: 19.03.2009
Сообщений: 195
11.06.2010, 12:34  [ТС] #7
Всем спасибо
у //Александр правильно все считает, у neske считает, но не во всех случаях
0
neske
1526 / 893 / 191
Регистрация: 26.03.2010
Сообщений: 3,073
11.06.2010, 13:23 #8
Введите n>100, посомтрим что будет. Я про код //Александр
0
Inadequate
Retired
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
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
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 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
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
11.06.2010, 13:57 #11
kazak, а в чем неожиданность ? Объясни пожалуйста, а я если что-то не так приму к сведению.

kazak, пардон, про положительные я просмотрел чуток ну исправить до нужного совсем несложно, поэтому такие мелочи я исправлять не буду.
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
11.06.2010, 14:00 #12
Цитата Сообщение от Inadequate Посмотреть сообщение
kazak, а в чем неожиданность ? Объясни пожалуйста, а я если что-то не так приму к сведению.
Вроде как размер статического массива должен быть известен компилятору на стадии компиляции. Мне конечно приходилось сталкиватся с таким случаем на Dev-C++, но остальные компиляторы всетаки придерживаются традиций и выдают ошибки.
1
Inadequate
Retired
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
11.06.2010, 14:05 #13
kazak, да, действительно проверял на Dev-C++. Я учту вышесказанное, спасибо.
0
neske
1526 / 893 / 191
Регистрация: 26.03.2010
Сообщений: 3,073
11.06.2010, 14:16 #14
Цитата Сообщение от Inadequate Посмотреть сообщение
neske, //Александр, kazak, а если в массиве не будет вообще отрицательных ?
Программа выведет в консоль сообщение о том, что произведенеи равно единице (;
0
Inadequate
Retired
7709 / 2542 / 670
Регистрация: 17.10.2009
Сообщений: 5,100
11.06.2010, 14:22 #15
neske, шутку оценил, но только так быть не должно.
1
neske
1526 / 893 / 191
Регистрация: 26.03.2010
Сообщений: 3,073
11.06.2010, 15:17 #16
Это была не шутка
Да, вы правы.
0
11.06.2010, 15:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2010, 15:17
Привет! Вот еще темы с решениями:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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