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

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

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

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

06.11.2013, 22:28. Просмотров 358. Ответов 7
Метки нет (Все метки)

Определить в одномерном числовом массиве 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; 
}
В чем моя ошибка? как можно ее исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 22:28     Ошибка в коде (взаимно обратные числа)
Посмотрите здесь:

Взаимно обратные числа - C++
Помогите написать программу, которая в последовательности действительных чисел позволяет выяснить, имеются ли среди соседних элементов в...

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

Разбиение числа на сумму квадратов(ошибка в коде). - C++
Задача банальна: с клавиатуры вводится число, нужно его представить в виде суммы двух квадратов. Программа должна работать менее 1 секунды....

Битовое представление вещественного числа, ошибка в коде - C++
#include &lt;iostream&gt; using namespace std; void binary (double x); //функция вывода представления числа через объединение int...

Удалить из числа все повторяющиеся цифры кроме первого вхождения. Ошибка в коде - C++
Удалить из числа все повторяющиеся цифры кроме первого вхождения. Например: на входе: 112, на выходе: 12. В моем случаи: на входе:...

Взаимно простые числа - C++
Ребят, помогите пожалуйста задачу решить на Си... Даны 2 числа, выяснить являются ли они взаимно простыми( не имеют общих делителей кроме...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ssXXss
264 / 186 / 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
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
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     Ошибка в коде (взаимно обратные числа)
Еще ссылки по теме:

Взаимно простые числа - C++
Два натуральных числа a и b называются взаимно простыми, если их наибольший общий делитель равен 1. Несколько натуральных чисел называются...

Взаимно простые числа - C++
Задание таково:составить программу, отвечающую на вопрос, являются ли два произвольных натуральных числа взаимно простыми. на С++

взаимно простые числа - C++
Для двух натуральных чисел P и Q, меньших 1000000, напишите программу, которая определяет, числа являются взаемнопростимы (не имеют ...

Взаимно простые числа - C++
Задание таково:составить программу, отвечающую на вопрос, являются ли два произвольных натуральных числа взаимно простыми. З.Ы. Я...


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

Или воспользуйтесь поиском по форуму:
Байт
Эксперт C
15683 / 10010 / 1504
Регистрация: 24.12.2010
Сообщений: 18,808
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     Ошибка в коде (взаимно обратные числа)
Ответ Создать тему
Опции темы

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