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

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

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

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

06.11.2013, 22:28. Просмотров 363. Ответов 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++
Помогите написать программу, которая в последовательности действительных чисел позволяет выяснить, имеются ли среди соседних элементов в...

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

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

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. - C++
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p - C++
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p. помогите сделать на с++

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р - C++
Получить все делители числа q, взаимно простые с р.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ssXXss
266 / 188 / 10
Регистрация: 15.01.2011
Сообщений: 681
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
Байт
Эксперт C
15984 / 10252 / 1536
Регистрация: 24.12.2010
Сообщений: 19,339
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)
Арифметика математическая (бытовая, теоретическая, бесконечная) и машинная (конечная), увы! различаются.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 01:08
Привет! Вот еще темы с ответами:

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p. - C++
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p.

Найти все натуральные числа, меньшие заданного числа и взаимно простые с ним - C++
Дано натуральное число n. Необходимо получить все натуральные числа, меньшие nn и взаимно простые с ним (два натуральных числа называются...

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

не могу понять задачку :) Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с p - C++
Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с p.


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

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

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