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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Нахождение НОД  
:(
    Опции темы
Tripl-X
  Дата 4.1.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, помогите с решением этих простых задач!

1. Найти наименьшии общий делитель для всех чисел массива:
int main(void)
Код

{
 int A[10]={0}, j, i, g;

  for(i=0; i<10; i++)
   scanf("%i", &A[i]);
   printf("\n\n");
  for(i=0; i<10; i++)
    {
     for(j=2; j<100; j++)
     if((A[i]%j)==0) printf("%i ", j);
    }
 getch();
}


... Не знаю, что делать дальше... печатаются все делители каждого из чисел.

2.
Замнеить все маленькие буквы на большие.
Код

int main(void)
{
int i;
 char A[255]={0};
 for(i=0; i<255; i++);
   scanf("%x", A[i]);
 for(i=0; i<255; i++)
   if((A[i]>='a') && (A[i]<='z'))
    {
      A[i]-=0x21;
      printf("%c", A[i]);
    }
getch();
}

Попытался сделать с помошью шестнадцатеричного кода... не получилось. Может у вас получится smile
Заранее спасибо!
PM MAIL ICQ   Вверх
sergejzr
Дата 4.1.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Функция отдаст НОД
Код

int NOD(int x, int y)
{
   int rest;
   do
   {
     rest = x % y;
     x = y;
     y = rest;
   } while (rest!=0);

   return x;
 }


Твой код следовало бы переписать примерно так:
Код

{
 int A[10]={0}, j, i, g;

for(i=0; i<10; i++)
{
    scanf("%i", &A[i]);
   printf("\n\n");
  for(i=0; i<10; i++)
    {
     for(j=2; j<100; j++)
     if((A[i]%j)==0){printf("%i ", j); break;}//как только первое число нашли, заканчиваем цикл
    }
}
 getch();
}


А во втором, лучше делать:
if((A[i]>='a') && (A[i]<='z'))
A[i]-='a'+'A';


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Tripl-X
Дата 4.1.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sergej.z

В первой проге считае НОД для каждого символа, а нужно для всего массива...
Как это можно сделать?

***

Цитата(sergej @ 4.1.2005, 21:55)
A[i]-='a'+'A'


после этой строки компилятор пишет
Цитата
Conversion may lose significant digits

Что с этим можно сделать?


PM MAIL ICQ   Вверх
neutrino
Дата 4.1.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Цитата(Tripl @ 4.1.2005, 16:14)
Найти наименьшии общий делитель для всех чисел массива


Наименьший общий делитель 1. Может нужен наибольший? Или наименьшее общее кратное? Корректируй вопрос.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
sergejzr
Дата 4.1.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(Tripl @ 4.1.2005, 20:56)
после этой строки компилятор пишет

Conversion may lose significant digits

Потому, что A[i] у тебя int.

Код

if((A[i]>='a') && (A[i]<='z'))
{
 A[i]-=(int)'a';
 A[i]+=(int)'A';
//Но вообще то A должен по хорошему быть char[10]
}


А с НОДами тогда так:
Код

int nod=NOD(A[0],A[1]);
for(i=2; i<10; i++)
{
nod=NOD(nod,A[i]);
}
printf("%i ", nod);

Добавлено @ 23:40
Цитата(neutrino @ 4.1.2005, 22:34)
Наименьший общий делитель 1. Может нужен наибольший? Или наименьшее общее кратное? Корректируй вопрос.

Это точно smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
neutrino
Дата 4.1.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



С маленькими буквами самый быстрый способ, что я придумал: использовать маску. Если известно, что это точно буква (а не точка или другой символ), то для того, чтобы из большой сделать маленькую, нужно включить шестой бит, а из маленькой большую наоборот выключить этот бит.
Например переменная С содержит букву, тогда делаем из нее маленькую:

Код

char C;

...

C |= 32;


и большую:

Код

C &= 223; // (-32)


В этом процессе "не портятся" уже маленькие/большие буквы.



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Tripl-X
Дата 5.1.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, извиняюсь. Конечно же кратное, а не делитель... делитель в другом задании... поссмотрел не туда... smile
PM MAIL ICQ   Вверх
sergejzr
Дата 5.1.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



int NOK(int x, int y)
{

return (x*y) / NOD(x,y);
}


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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