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

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

Войти
Регистрация
Восстановить пароль
 
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
#1

Массивы, поиск последовательных элементов, создающих прогрессию - C++

29.04.2012, 22:54. Просмотров 764. Ответов 14
Метки нет (Все метки)

Привет!
Программа заключается в том, что она ищет в массиве три последовательных элемента которые создают арифметическую или геометрическую прогрессию. Но у меня вылетает ошибка при запуске программы, но считает первую партию чисел правильно. Помогите пожалуйста!
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
#include<stdio.h>
#include<stdlib.h>
 
 
int main(void)
{
   int n=100,i,f=0;
   int a[n];
   srand(6);
    for(i=0;i<n;i++)
     a[i]=rand()%11;
    printf("\n\nArray A\n\n");
     for(i=0;i<n;i++)
      printf("%8i",a[i]);
 
    for(i=0;i<n-2;i++)
     if((a[i]-a[i+1]==a[i+1]-a[i+2])||(a[i+2]/a[i+1]==a[i+1]/a[i]))
       {
           printf("\nYes");
           printf("\na[%i]=%i",i,a[i]);
           printf("\na[%i]=%i",i+1,a[i+1]);
           printf("\na[%i]=%i",i+2,a[i+2]);
           f=1;
       }
       if(f==0)
       printf("\nNO");
 return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2012, 22:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы, поиск последовательных элементов, создающих прогрессию (C++):

Массивы. Найти минимум из сумм 3-х его последовательных элементов - C++
Вводится массив. Найти минимум из сумм 3-х его последовательных элементов. Например, для массива 1 3 4 6 7 данные суммы равны 8, 13 и 17,...

Многомерные массивы. Поиск количества тех элементов матрицы,которые больше суммы остальных элементов своего столбца - C++
Здравствуйте, пожалуйста помогите с программой. Дана целочисленная матрица из N строки и M столбцов (1&lt;N&lt;=100,1&lt;M&lt;=50).Выполнить заданную...

Массивы: поиск элементов с заданными свойствами - C++
Обработка массива:а)определение суммы элементов,кол-во элементов удовлетворяющих некоторому условию,минимальный и максимальный элемент в...

Поиск суммы последовательных узлов в бинарном дереве - C++
Дано: бинарное дерево (Например созданное по этому алгоритму). Число S. Нужно найти последовательность узлов (только с вверху вниз или...

Найти тройку последовательных элементов массива F с наименьшей суммой - C++
найти наибольший элемент массива А,меньший произведения элементов с нечетными номерами найти тройку последовательных элементов массива F...

Определить подвектор, как один или более последовательных элементов массива - C++
Всем привет) я полный ноль в программирование, прошу о помощи.. Задан массив целых чисел. Определить подвектор, как один или более...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
29.04.2012, 23:10 #2
в выражении
C++
1
 (a[i+2]/a[i+1]==a[i+1]/a[i])
деление на 0
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
29.04.2012, 23:11 #3
(a[i+2]/a[i+1]==a[i+1]/a[i])
здесь деление на ноль
upd: + стоит учитывать, что деля целое на целое получаем целое, т.е. дробную часть потеряете, и результат будет неверный.
1
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:11  [ТС] #4
ТОЧНО!!! Как я сразу не увидел?! А подскажите пожалуйста как обойти это деление на 0?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
29.04.2012, 23:16 #5
Цитата Сообщение от fenixgaurd Посмотреть сообщение
a[i]=rand()%11;
+ 1 добавляйте, число будет в интервале [1; 11].
C++
1
a[i] = rand()%11 + 1;
или поменяйте
C++
1
if((a[i]-a[i+1]==a[i+1]-a[i+2])||(a[i+2]/a[i+1]==a[i+1]/a[i]))
на
C++
1
if ((a[i] - a[i+1] == a[i+1] - a[i+2]) ||(a[i] != 0 && a[i + 1] != 0 && (a[i + 2] / a[i + 1] == a[i + 1] / a[i])))
т.е. проверяйте на 0 перед делением.
1
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:18  [ТС] #6
Цитата Сообщение от gray_fox Посмотреть сообщение
здесь деление на ноль
upd: + стоит учитывать, что деля целое на целое получаем целое, т.е. дробную часть потеряете, и результат будет неверный.
А у меня целый массив, не вещественный. Разве это тут отразится?

Добавлено через 1 минуту
Хорошо, но поймите, меня, препод копает под нас ужас как, он введет массив с 0 и скажет вот она и не работает. Это вообще курсовая моя, точнее ее часть. Подскажите тогда как сделать? Помоему если деление на 0, то просто прогрессия меняет знак. А вот как это сделать?
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
29.04.2012, 23:24 #7
ну т.к член геом. прогрессии не может равняться нулю, то так
C++
1
2
3
...
if((a[i]-a[i+1]==a[i+1]-a[i+2]) || (a[i+1] != 0 && a[i] != 0 && a[i+2]/a[i+1]==a[i+1]/a[i]))
...
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
29.04.2012, 23:25 #8
Цитата Сообщение от fenixgaurd Посмотреть сообщение
А у меня целый массив, не вещественный. Разве это тут отразится?
4, 6, 9 - геом. прогрессия? 9 / 6 == 1 и 6 / 4 == 1. А 4, 6, 8 ? 8 / 6 == 1 и 6 / 4 == 1 )))
0
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:31  [ТС] #9
Ну ребят спасибо вам огромное!
Так на вскидочку вот код, правильно? Так то вроде не ругается.
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
#include<stdio.h>
#include<stdlib.h>
 
 
int main(void)
{
   int n=50,i,f=0,k=0;
   int a[n];
   srand(6);
    for(i=0;i<n;i++)
     a[i]=rand()%61-10;
    printf("\n\nArray A\n\n");
     for(i=0;i<n;i++)
      printf("%8i",a[i]);
 
    for(i=0;i<n-2;i++)
     if(a[i]-a[i+1]==a[i+1]-a[i+2])
       {
           k++;
           printf("\n\nArifm progressiv #%i",k);
           printf("\na[%i]=%i",i,a[i]);
           printf("\na[%i]=%i",i+1,a[i+1]);
           printf("\na[%i]=%i",i+2,a[i+2]);
           f=1;
       }
       if(f==0)
       printf("\nArifm progressiv NO");
       k=0;
       printf("\n\n\n");
     for(i=0;i<n-2;i++)
      if((a[i]!=0 && a[i+1]!=0 && (a[i+2]/a[i+1]==a[i+1]/a[i])))
       {
           k++;
           printf("\n\nGeometr progressiv #%i",k);
           printf("\na[%i]=%i",i,a[i]);
           printf("\na[%i]=%i",i+1,a[i+1]);
           printf("\na[%i]=%i",i+2,a[i+2]);
           f=1;
       }
       if(f==0)
       printf("\nNO");
 return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
4, 6, 9 - геом. прогрессия? 9 / 6 == 1 и 6 / 4 == 1. А 4, 6, 8 ? 8 / 6 == 1 и 6 / 4 == 1 )))
Я тебя понял! То есть для геометр прогрессии нужно вводить тип данных вещественный?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
29.04.2012, 23:38 #10
Цитата Сообщение от fenixgaurd Посмотреть сообщение
То есть для геометр прогрессии нужно вводить тип данных вещественный?
Да. Т.е. примерно так:
C++
1
if (a[i + 1] != 0 && a[i] != 0 && (std::fabs((double)a[i + 2] / a[i+1] - (double)a[i+1] / a[i]) < epsilon))
где epsilon - некое малое число (два числа с плавающей точкой просто сравнивать нельзя, т.к. имеет место потеря точности)
1
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:43  [ТС] #11
Цитата Сообщение от gray_fox Посмотреть сообщение
(std::fabs((double)a[i + 2]
Что такое std fabs? а то в си++ я не силен
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
29.04.2012, 23:47 #12
Цитата Сообщение от fenixgaurd Посмотреть сообщение
Что такое std fabs?
абсолютное значение http://www.cplusplus.com/reference/clibrary/cmath/fabs/
1
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
30.04.2012, 00:25  [ТС] #13
предупреждение: warning: implicit declaration of function 'fabs'
warning: incompatible implicit declaration of build-in function 'fabs'
Что означает?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
30.04.2012, 00:28 #14
Цитата Сообщение от fenixgaurd Посмотреть сообщение
implicit declaration of function 'fabs'
C++
1
#include <cmath>
Цитата Сообщение от gray_fox Посмотреть сообщение
implicit declaration of function 'fabs'
Это значит функция не объявлена, но используется.
1
fenixgaurd
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
30.04.2012, 01:28  [ТС] #15
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
#include <cmath>
Написал вопрос и сразу же в нем разобрался, забыл мат библиотеку. Всем спасибо кто помогал мне)!!

Добавлено через 1 час 0 минут
Задача была решена, всем спасибо кто мне помог. Выкладываю код программы, может кому в будущем пригодится!
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
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
 
 
int main(void)
{
    float epsilon=0.0001;
   int n=50,i,f=0,k=0;
   int a[n];
   srand(6);
    for(i=0;i<n;i++)
     a[i]=rand()%11+1;
    printf("\n\nArray A\n\n");
     for(i=0;i<n;i++)
      printf("%8i",a[i]);
 
    for(i=0;i<n-2;i++)
     if(a[i]-a[i+1]==a[i+1]-a[i+2])
       {
           k++;
           printf("\n\nArifm progressiv #%i",k);
           printf("\na[%i]=%i",i,a[i]);
           printf("\na[%i]=%i",i+1,a[i+1]);
           printf("\na[%i]=%i",i+2,a[i+2]);
           f=1;
       }
       if(f==0)
       printf("\nArifm progressiv NO");
       k=0;
       printf("\n\n\n");
     for(i=0;i<n-2;i++)
      if(a[i]!=0 && a[i+1]!=0 && (fabs((double)a[i+2]/a[i+1]-(double)a[i+1]/a[i])<epsilon))
       {
           k++;
           printf("\n\nGeometr progressiv #%i",k);
           printf("\na[%i]=%i",i,a[i]);
           printf("\na[%i]=%i",i+1,a[i+1]);
           printf("\na[%i]=%i",i+2,a[i+2]);
           f=1;
       }
       if(f==0)
       printf("\nArifm progressiv NO");
       k=0;
       printf("\n\n\n");
 return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 01:28
Привет! Вот еще темы с ответами:

Массив: Поиск трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. - Delphi
Нужно решить две задачки: 1. Напишите программу поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве...

Поиск N-ой комбинцаии перестановок строки из A последовательных элементов - VBA
Доброго времени суток. Появилась задача, но к сожалению моей технической подготовки не хватает для её реализации. Есть строка длинной...

Определить, существуют ли в массиве три последовательных элемента, образующих арифметическую или геометрическую прогрессию. - C (СИ)
Всем доброго времени суток! Помогите пожалуйста решить задачу: Дан массив размера N. Определить, существуют ли в массиве три...

Поиск первого из двух последовательных элементов в массиве, сумма которых минимальна - Pascal
Доброго времени суток. Имеется задача: Опишите на языке программирования Pascal алгоритм поиска первого из двух последовательных...


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

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

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