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

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

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

Author24 — интернет-сервис помощи студентам
Привет!
Программа заключается в том, что она ищет в массиве три последовательных элемента которые создают арифметическую или геометрическую прогрессию. Но у меня вылетает ошибка при запуске программы, но считает первую партию чисел правильно. Помогите пожалуйста!
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2012, 22:54
Ответы с готовыми решениями:

Массивы. Найти минимум из сумм 3-х его последовательных элементов
Вводится массив. Найти минимум из сумм 3-х его последовательных элементов. Например, для массива 1...

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

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

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

14
127 / 125 / 16
Регистрация: 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
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
29.04.2012, 23:11 3
(a[i+2]/a[i+1]==a[i+1]/a[i])
здесь деление на ноль
upd: + стоит учитывать, что деля целое на целое получаем целое, т.е. дробную часть потеряете, и результат будет неверный.
1
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:11  [ТС] 4
ТОЧНО!!! Как я сразу не увидел?! А подскажите пожалуйста как обойти это деление на 0?
0
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
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
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:18  [ТС] 6
Цитата Сообщение от gray_fox Посмотреть сообщение
здесь деление на ноль
upd: + стоит учитывать, что деля целое на целое получаем целое, т.е. дробную часть потеряете, и результат будет неверный.
А у меня целый массив, не вещественный. Разве это тут отразится?

Добавлено через 1 минуту
Хорошо, но поймите, меня, препод копает под нас ужас как, он введет массив с 0 и скажет вот она и не работает. Это вообще курсовая моя, точнее ее часть. Подскажите тогда как сделать? Помоему если деление на 0, то просто прогрессия меняет знак. А вот как это сделать?
0
127 / 125 / 16
Регистрация: 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
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
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
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
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
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
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 57
29.04.2012, 23:43  [ТС] 11
Цитата Сообщение от gray_fox Посмотреть сообщение
(std::fabs((double)a[i + 2]
Что такое std fabs? а то в си++ я не силен
0
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
29.04.2012, 23:47 12
Цитата Сообщение от fenixgaurd Посмотреть сообщение
Что такое std fabs?
абсолютное значение http://www.cplusplus.com/refer... math/fabs/
1
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
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
30.04.2012, 00:28 14
Цитата Сообщение от fenixgaurd Посмотреть сообщение
implicit declaration of function 'fabs'
C++
1
#include <cmath>
Цитата Сообщение от gray_fox Посмотреть сообщение
implicit declaration of function 'fabs'
Это значит функция не объявлена, но используется.
1
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
30.04.2012, 01:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2012, 01:28
Помогаю со студенческими работами здесь

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

Поиск номера первого из двух последовательных элементов массива, сумма которых минимальна
Опишите на языке программирования алгоритм поиска номера первого из двух последовательных элементов...

Поиск номера первого из двух последовательных элементов в массиве, сумма которых максимальна
Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из...

Многомерные массивы. Поиск количества тех элементов матрицы,которые больше суммы остальных элементов своего столбца
Здравствуйте, пожалуйста помогите с программой. Дана целочисленная матрица из N строки и M...


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

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