Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
proger2030
12 / 12 / 5
Регистрация: 15.11.2010
Сообщений: 256
#1

Вычислить сумму произведений всех троек соседних чисел массива

05.09.2011, 12:15. Просмотров 2093. Ответов 21
Метки нет (Все метки)

Дан одномерный числовой массив A из n элементов. Вычислить сумму произведений всех троек соседних чисел.
Вот на паскале
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const
  n=10;
var
  a:array[1..n]of integer;
  i,j,sum:longint;
begin
  writeln('Исходный массив:');
  sum:=0;
  for i:=1 to n do
  begin
    a[i]:=random(8)-4;
    if i>=3 then
      inc(sum,a[i]*a[i-1]*a[i-2]);
    write(a[i],' ')
  end;
  WriteLn;
  WriteLn(sum)
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.h>
#include <cstdlib>
 
const n = 10;
 
int main () {
 
    int mas[n];
    int i, j, sum;
    
    cout << "Ishodnoi massiv: ";
    sum = 0;
 
    for (i = 0; i < n; i++)
 
        mas[i] = rand();
        
        if (i >= 3)
            sum = sum + mas[i] * mas[i-1] * mas[i -2];
 
    for (i = 0; i < 10; i++)
    cout << mas[i] << ' ';
        
    cout << endl;
    cout << "Summa proizvedenii vsex troek sosednih chisel: " << sum << endl;
 
 
    
 
 
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 12:15
Ответы с готовыми решениями:

В заданном числовом массиве вычислить сумму произведений всех троек соседних чисел.
7.9.1. Помогите, пожалуйста, решить задачу в С++. \В заданном числовом...

Вычислить сумму парных произведений соседних элементов массива
aa+ aa+...+ aa

Задан одномерный массив,вычислить сумму произведении всех пар соседних чисел
Задан одномерный массив,вычислить сумму произведении всех пар соседних чисел

Посчитать сумму произведений всех N-значных чисел
Всем добрый день! Есть задание - требуется вычислить сумму произведений цифр...

Вычислить сумму всех положительных чисел массива
создать программу, вычисляющую сумму всех положительных чисел массива. Элементы...

21
-=ЮрА=-
Заблокирован
Автор FAQ
05.09.2011, 12:23 #2
Цитата Сообщение от proger2030 Посмотреть сообщение
Но у меня что-то не так.
перед использованием rand нужно вбить srand(0), сейчас подправлю

Добавлено через 38 секунд
Цитата Сообщение от proger2030 Посмотреть сообщение
for (i = 0; i < n; i++)
mas[i] = rand();
if (i >= 3)
* * * * * * * * * * * * sum = sum + mas[i] * mas[i-1] * mas[i -2];
Скобки цикла забыл!!!
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
05.09.2011, 12:27 #3
Если это переводить максимально близко, то
Pascal
1
2
    a[i]:=random(8)-4;
    if i>=3 then
соответствует
C++
1
2
    mas[i] = rand()%9 - 4;
    if (i >= 2)
Добавлено через 1 минуту
И да, у цикла for из строк 14—19 должны быть фигурные скобки, окружающие тело.
0
-=ЮрА=-
Заблокирован
Автор FAQ
05.09.2011, 12:33 #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
36
37
38
39
#include <iostream.h>
#include <cstdlib>
 
const n = 10;
int GetRandNum(int iMax);
 
int main () 
{
 
    int mas[n];
    int i, sum;
    char ch;
    do
    {
        srand(0);
        cout << "Ishodnoi massiv: ";
        sum = 0;
 
        for (i = 0; i < n; i++)
        {
            cout<<(mas[i] = GetRandNum(10))<<"\r\n";
            if (i >= 3)
                sum += (mas[i] * mas[i - 1] * mas[i - 2]);
        }
        cout << "Summa proizvedenii vsex troek sosednih chisel: " << sum << endl;
        cout<<"Y - new enter\r\n";
        cin>>ch;
    }
    while(ch == 'Y' || ch == 'y');
    return 0;
}
 
int GetRandNum(int iMax)
{
    int ret = rand();
    while(iMax < ret)
        ret = rand();
    return ret;
}
Добавлено через 1 минуту
Кроме скобок біла проблемма здесь
Цитата Сообщение от proger2030 Посмотреть сообщение
mas[i] = rand();
- программа генерировала на сколь угодно больше int - при 3-х кратном произведении был возможен выход за пределы INT_MAX, что и происходило, поэтому ввёл функцию GetRandNum - которая ограничивает величину генерируемого числа

Добавлено через 58 секунд
Цитата Сообщение от grizlik78 Посмотреть сообщение
И да, у цикла for из строк 14—19 должны быть фигурные скобки, окружающие тело.
уже писал об этом
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Скобки цикла забыл!!!
1
proger2030
12 / 12 / 5
Регистрация: 15.11.2010
Сообщений: 256
05.09.2011, 12:36  [ТС] #5
[QUOTE=grizlik78;1961423]
C++
1
2
    mas[i] = rand()%9 - 4;
    if (i >= 2)
Можешь объяснить для чего это делается? (именно тот часть где после rand()) %9 -4
0
-=ЮрА=-
Заблокирован
Автор FAQ
05.09.2011, 12:38 #6
Цитата Сообщение от proger2030 Посмотреть сообщение
rand()) %9
- это остаток от целочисленного деления на 9, потом от этого числа отнимаешь 4
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
05.09.2011, 12:38 #7
x % 9 это нахождения остатка от деления на 9.
То есть rand() % 9 будет возвращать числа от 0 до 8 включительно.
Ну а вычитая 4 получаем числа от -4 до 4
0
Ann831
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 7
05.09.2011, 12:43 #8
В массиве 20 элементов, Увеличить положительные элементы на 2, отрицательные элементы уменьшить на 1, а нулевые оставить без изменений.Добрые хорошие люди помогите пожалуйсто решить задачу.
0
-=ЮрА=-
Заблокирован
Автор FAQ
05.09.2011, 12:52 #9
Цитата Сообщение от Ann831 Посмотреть сообщение
В массиве 20 элементов,
- как они получены, заданы изначально, путём вводу или же как в этом топике рандомно сгенерированы?PS:Создай отдельный топик, тогда его все видеть смогут...
0
Ann831
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 7
05.09.2011, 12:59 #10
В массиве B 20 элементов.Найти и напечатать,Увеличить положительные элементы на 2, отрицательные элементы уменьшить на 1, а нулевые оставить без изменений. Что есть топик. Сильно надо мной не смейтесь, потому как я в компе аще полный аут. Спасибо что не проигнорировали Блондинку
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.09.2011, 13:07 #11
Цитата Сообщение от Ann831 Посмотреть сообщение
В массиве 20 элементов, Увеличить положительные элементы на 2, отрицательные элементы уменьшить на 1, а нулевые оставить без изменений.Добрые хорошие люди помогите пожалуйсто решить задачу.
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
#include <iostream>
#include <iomanip>
#include <boost/foreach.hpp>
#include <cstdlib>
 
int main()
{
    srand(time(0) );
    int arr[10];
    
    std::cout << "Before: ";
    BOOST_FOREACH(int &x, arr )
    {
        x = rand() % 20 - 10;
        std::cout << std::setw(3) << x << ' ';
    }
    
    std::cout << "\nAfter:  ";
    
    BOOST_FOREACH(int &x, arr)
    {
        if (x < 0)
            --x;
        if (x > 0)
            ++++x;
        std::cout << std::setw(3) << x << ' ';
    }
    
    std::cout << std::endl;
}
Bash
1
2
3
4
diagon@shadeware:~$ g++ 11.cpp && ./a.out
Before:   9  -8   1  -1   9  -2   5  -4   4  -5 
After:   11  -9   3  -2  11  -3   7  -5   6  -6 
diagon@shadeware:~$
1
Ann831
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 7
05.09.2011, 14:20 #12
Код Pascal Мне нужно это сделать в Паскале. А в этой форме я не шпрейхен.Вот еще такое задание: Массив В состоит из 25 элементов.Поменять местами элементы, расположенные в первой и второй половине массива. Вот как изучить этот Паскаль за 4часа лекции. Пипец пардон какой то. Спасибо.
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
05.09.2011, 14:23 #13
Цитата Сообщение от Ann831 Посмотреть сообщение
Мне нужно это сделать в Паскале
Так какого чёрта ты пишешь мало того, что в чужой теме, так ещё и в разделе C++ ?
0
soon
2545 / 1310 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
05.09.2011, 14:28 #14
Код Pascal Мне нужно это сделать в Паскале
Вам сюда

Не по теме:

В последнее время у меня создается впечатление, что только я(ну и еще несколько сотен счастливчиков) проходили паскаль в школе. И алгебру. И русский. И...

C++
1
2
for(int i = 2; i < subjInSchool; ++i) 
std::cout << schoolSubj[i];

1
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.09.2011, 14:44 #15
Цитата Сообщение от Ann831 Посмотреть сообщение
В массиве B 20 элементов.Найти и напечатать,Увеличить положительные элементы на 2, отрицательные элементы уменьшить на 1, а нулевые оставить без изменений.
Цитата Сообщение от Ann831 Посмотреть сообщение
Код Pascal Мне нужно это сделать в Паскал
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var arr:array[1..20] of integer;
i:byte;
begin
 randomize;
 write('Before: ');
 for i:= 1 to 20 do
 begin
  arr[i]:=random(10) - 5;
  write(arr[i], ' ');
 end;
 writeln;
 write('After: ' );
 for i:= 1 to 20 do
 begin
 if arr[i] < 0 then dec(arr[i]);
 if arr[i] > 0 then arr[i]:=arr[i] + 2;
 write(arr[i], ' ');
 end;
 writeln;
 readln;  
end.
1
Ann831
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 7
05.09.2011, 16:05 #16
randomize;А это что ? Вот проверти еще пожалуйсто.Массив В состоит из элементов.Поменять местами элементы,расположенные в первой и второй половине массива.
var A: array [1......16];
begin write ( введите n <16);
readln (n);
for i:=1 to n do
writeln (введите A, i);
readln (A[i]);
И так далее. Я просто не знаю как правильно напечатать задачу в форуме К сожалению в школе Паскале,да и информатики не было. Спасибо за понимание.

Добавлено через 7 минут
Цитата Сообщение от grizlik78 Посмотреть сообщение
Так какого чёрта ты пишешь мало того, что в чужой теме, так ещё и в разделе C++ ?
Ой простите ради бога. А вот хрен его знает почему я ввашу тему залезла. Приношу извенения глубочайшие. Я понимаю, что на фоне ваших умов выгляжу полной дурой. Из за не знания я и обратилась на ваш сайт.
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
05.09.2011, 16:28 #17
Цитата Сообщение от Ann831 Посмотреть сообщение
randomize;А это что ?
Это процедура (не путать с полной дурой ), которая инициализирует генератор случайных чисел (вроде от текущего времени).

Цитата Сообщение от Ann831 Посмотреть сообщение
А вот хрен его знает почему я ввашу тему залезла.
Она не наша

Цитата Сообщение от Ann831 Посмотреть сообщение
Я понимаю, что на фоне ваших умов выгляжу полной дурой.
Не было такого. Просто на форуме есть тематические разделы. И в разделе Паскаля значительно больше шансов получить помощь, чем в разделе, где на Паскаль смотрят с... э... Ну как на ребетёнка (хотя ни C, ни C++, ни даже сам Pascal толком не знают )
1
Ann831
0 / 0 / 0
Регистрация: 05.09.2011
Сообщений: 7
05.09.2011, 16:35 #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
Это процедура (не путать с полной дурой ), которая инициализирует генератор случайных чисел (вроде от текущего времени).


Она не наша


Не было такого. Просто на форуме есть тематические разделы. И в разделе Паскаля значительно больше шансов получить помощь, чем в разделе, где на Паскаль смотрят с... э... Ну как на ребетёнка (хотя ни C, ни C++, ни даже сам Pascal толком не знают )
Ой спасибо вам большое. Тогда раз все не так уж плохо,ну в смысле что вы меня не гоните. Я там выше изложила начало решения верно ли оно. Я конечно обращусь в тему Паскаля. Но все же раз уж нацарапала каку то штуку посмотрите пожалуйсто.
0
proger2030
12 / 12 / 5
Регистрация: 15.11.2010
Сообщений: 256
05.09.2011, 19:04  [ТС] #19
Добавлено через 4 минуты
Как (на консол) выводить тех чисел которые суммирутся и умнажается ? Хочу проверить ручную

Добавлено через 49 минут
Как выводит тех чисел которые суммирутся и умнажается?
0
#pragma
06.09.2011, 19:14     Вычислить сумму произведений всех троек соседних чисел массива
  #20

Не по теме:

soon, а как Вы сделали такой меленький шрифт в коде С++? Выглядит симпатично. Это он сам таким стаёт,если пользоваться тегом OFF?

0
06.09.2011, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2011, 19:14
Привет! Вот еще темы с ответами:

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

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

Имеем число, вычислить суму произведений цифр для всех чисел длиной
Не могу как досчитать Имеем число N(количество цифр), вычислить суму...


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

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

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