Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы, найти НОД и НОК элементов массива 
V
    Опции темы
Vorona81
Дата 27.4.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Добрый день! Помогите найти ошибку в коде. Очень рассчитываю на ваш помощь!
Задача:Наити наименьшее общее кратное элементов массива (т.е. число которое делится на все). 
Программа для введенных с клавиатуры элементов массива: 4 12 8 23 45 - считает верно.
А вот для 17 29 95 23 4 выдает минус 16 556. Число не является НОК для этих элеменов, и откуда берется минус?? Для элементов 120 46 8 368 14, тоже выдает неверный результат 2478.
Пробовала написать программу только для нахождения НОД, чтобы проверить работу функции func_NOD - работает верно, соотвсетсвенно и НОК будет работать так как там формула не сложная. Ошибка в основной программе... Но где?? ПОМОГИТЕ!!!
Код
#include<stdio.h>
#include<conio.h>
#include<math.h>

int func_NOD(int a, int b)
{ int c;
  while (b)
  {
     c = a % b;
     a = b;
     b = c;        
  }
  return abs(a);
}

int func_NOK(int a,int b)
{
int c;
c=(a*b)/func_NOD(a,b);
return c;
 }


void main ()
{
const int n=5;
int A[n];
int i,nok;

printf ("Enter %d number: ",n);
for (i=0; i<n;i++)

scanf ("%d",&A[i]);

nok=A[0];

for(i=1;i<n;i++)
nok=func_NOK(nok,A[i]);

printf ("NOK =%d",nok);
}


Модератор: пользуйся кнопкой "Код"

Это сообщение отредактировал(а) bsa - 27.4.2009, 16:45
PM MAIL   Вверх
Zakary
Дата 27.4.2009, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.5.2006

Репутация: нет
Всего: нет



при замене на потоки всё работает.
Код

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include <iostream>
using namespace std;
int func_NOD(int a, int b)
{ int c;
  while (b)
  {
     c = a % b;
     a = b;
     b = c;        
  }
  return abs(a);
}

int func_NOK(int a,int b)
{
int c;
c=(a*b)/func_NOD(a,b);
return c;
 }


void main ()
{
const int n=5;
int A[n];
int i,nok;

cout<<"Enter 5 number: ";
for (i=0; i<n;i++)
cin>>A[i];

nok=A[0];

for(i=1;i<n;i++)
nok=func_NOK(nok,A[i]);

cout<<nok;
} 


PM MAIL   Вверх
Vorona81
Дата 27.4.2009, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Большое спасибо за помощь Zakary!!! 
 Подскажи что такое потоки? Что означает эта строка using namespace std;?
Мне придется объяснить преподу что это такое?? а я совсем новичок в этом! smile 
PM MAIL   Вверх
mes
Дата 27.4.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250





--------------------
PM MAIL WWW   Вверх
Dov
Дата 27.4.2009, 09:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Vorona81, у тебя всё правильно работает. Просто твой НОК получается очень большим и выходит за границы диапазона  допустимых  значений для типа int на твоём компе. Просто бери другие значения и всё.

Добавлено через 2 минуты и 19 секунд
Или используй тип long для этих значений..


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Vorona81
Дата 28.4.2009, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Снова добрый день! 
Задача остается нерешенной. Совет с потоками не работает. Компилятор ругается на эту строчку -  using namespace std; и выдает ошибку.
Совет - использовать тип long для значений - тоже не помогает. 
А зачет на носу... 
ЛЮДИ ДОБРЫЕ, ПОМОГИТЕ КТО ЧЕМ МОЖЕТ !smile 

PM MAIL   Вверх
Andrey44
Дата 28.4.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Цитата(Vorona81 @  28.4.2009,  05:49 Найти цитируемый пост)
Компилятор ругается на эту строчку -  using namespace std; и выдает ошибку.

Странный у тебя компилятор. У тебя что STLа нету?
А что за компилятор?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Dov
Дата 28.4.2009, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Vorona81 @  28.4.2009,  05:49 Найти цитируемый пост)
Совет - использовать тип long для значений - тоже не помогает. 


Vorona81, тогда используй float или double, точно поможет. smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Andrey44
Дата 28.4.2009, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Dov, 
Код

sizeof float = sizof long



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 28.4.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Странный у тебя компилятор. У тебя что STLа нету?

Это Си.

Цитата

sizeof float = sizof long

Стандарт такого не гарантирует.

Цитата

тогда используй float или double, точно поможет

Могут быть проблемы, там проверки на ноль и тому подобное.

Vorona81
Цитата

тебя всё правильно работает. Просто твой НОК получается очень большим и выходит за границы диапазона  допустимых  значений для типа int на твоём компе.

вот точный ответ. Какой компилятор, какая ОС? Можно посмотреть на внутренности limits.h?
Как вариант можно использовать unsigned long если не нужны негативные числа.


PM   Вверх
Vorona81
Дата 28.4.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Смена типов на long,float, double не помогает. 
Компилятор не знаю какой, подскажите как посмотреть. Программу пишу в Borland C++.
Я еще совсем новичок! Помогите хорошей девочке smile 
PM MAIL   Вверх
azesmcar
Дата 28.4.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Vorona81
Я сказал
Цитата

Как вариант можно использовать unsigned long если не нужны негативные числа.

Еще сказано
Цитата

Или используй тип long для этих значений..


что выдает вот этот код? результат в студию
Код

#include <stdio.h>

int main()
{
   printf("%d, %d, %d\n", sizeof(int), sizeof(short), sizeof(long));
   return 0;
}



PM   Вверх
Andrey44
Дата 28.4.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Если на то пошло, то можно использовать __int64 как вариант.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 28.4.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Если на то пошло, то можно использовать __int64 как вариант. 

вряд ли он там есть smile 
PM   Вверх
Vorona81
Дата 28.4.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



Ответ для azemcar 
выдает 2, 2, 4

Добавлено через 6 минут и 5 секунд
чем нам это поможет?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.