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

Ошибка в коде (взаимно обратные числа) - C++

Восстановить пароль Регистрация
 
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
06.11.2013, 22:28     Ошибка в коде (взаимно обратные числа) #1
Определить в одномерном числовом массиве A, из n элементов число соседств из взаимно обратных чисел.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <iostream>
void main()
{
    setlocale(LC_ALL, "Russian");
  int n,i,flag;
  printf("Введите число элементов массива: ");
  scanf("%d",&n);
  float *a=new float[n]; 
  for (i=0;i<n;i++)
    { printf("Введите число a[%d]=",i);
      scanf("%f", &a[i]); 
    }
  for (i=0,flag=0;i<n;i++)
      { if (a[i]*a[i+1]==1) flag++;
      }
if (flag==0) printf ("\nТаких соседств нет!\n");
else ("\nЧисло соседств: %d \n", flag);
 
 delete[] a; 
}
В чем моя ошибка? как можно ее исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
06.11.2013, 22:35     Ошибка в коде (взаимно обратные числа) #2
а какая ошибка ???
reckless91
30 / 30 / 1
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 22:48     Ошибка в коде (взаимно обратные числа) #3
Цитата Сообщение от Vonka Посмотреть сообщение
В чем моя ошибка? как можно ее исправить?
второй цикл for, условие измените
for(i = 0, flag = 0; i < n - 1; i++)

и printf замените на cout
scanf на cin, но это уже так... пожелание

Добавлено через 10 минут
Ёперный театр, после else допишите printf
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
06.11.2013, 23:00  [ТС]     Ошибка в коде (взаимно обратные числа) #4
Цитата Сообщение от reckless91 Посмотреть сообщение
второй цикл for, условие измените
for(i = 0, flag = 0; i < n - 1; i++)
Не совсем понимаю смысл данной операции.
Никак не могу понять, ввожу 5 и 0,2 - оно не считает их взаимно обратными числами. Почему?
reckless91
30 / 30 / 1
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 23:17     Ошибка в коде (взаимно обратные числа) #5
Цитата Сообщение от Vonka Посмотреть сообщение
Не совсем понимаю смысл данной операции.
При условии i < n, на последней итерации i = n - 1 вы умножаете
a[i] * a[i+1], т.е. a[n - 1] * a[n]
тем самым, скажемс такс... "лезете в карман к соседу"
То, что храниться в a[n] - не данные из вашего массива
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
06.11.2013, 23:24  [ТС]     Ошибка в коде (взаимно обратные числа) #6
Если я правильно понял так будет выглядеть готовый код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <iostream>
void main()
{
setlocale(LC_ALL, "Russian");
int n,i,flag;
printf("Введите число элементов массива А: ");
scanf("%d",&n);
float *a=new float[n]; 
for (i=0;i<n;i++)
{ printf("Введите число А[%d]=",i);
    scanf("%f", &a[i]); 
}
for (i=0,flag=0;i<n-1;i++)
    { if (a[i]*a[i+1]==1) flag++;
    }
if (flag==0) printf ("\nТаких соседств нет!\n");
else printf ("\nЧисло соседств: %d \n", flag);
 
delete[] a; 
}
Но все еще не могу понять почему оно числа 5 и 0,2 не считает взаимно обратными. И не только с этим проблемы, также числа 25 и 0,04 - что не так в коде?
reckless91
30 / 30 / 1
Регистрация: 01.11.2013
Сообщений: 63
06.11.2013, 23:48     Ошибка в коде (взаимно обратные числа) #7
Цитата Сообщение от Vonka Посмотреть сообщение
Но все еще не могу понять почему оно числа 5 и 0,2 не считает взаимно обратными. И не только с этим проблемы, также числа 25 и 0,04 - что не так в коде?
вместо float пишите double
в scanf замените %f на %lf
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 01:08     Ошибка в коде (взаимно обратные числа)
Еще ссылки по теме:

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми C++
C++ Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p C++

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

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13954 / 8785 / 1222
Регистрация: 24.12.2010
Сообщений: 15,901
07.11.2013, 01:08     Ошибка в коде (взаимно обратные числа) #8
Цитата Сообщение от Vonka Посмотреть сообщение
if (a[i]*a[i+1]==1
Чиселки-то плавающие... Машинное представление-то не очень точное. Чтоб в этом убедиться, выведите ваши числа с 20-ю знаками после запятой. Не убедились? Тогда с 25-ю.
Вместо вашего условия следует записать
C
1
if (fmod(a[i]*a[i+1] - 1) < 0.0000001)
Арифметика математическая (бытовая, теоретическая, бесконечная) и машинная (конечная), увы! различаются.
Yandex
Объявления
07.11.2013, 01:08     Ошибка в коде (взаимно обратные числа)
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru