Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2012, 20:32   #1
Olala94
Новичок
Джуниор
 
Регистрация: 02.10.2012
Сообщений: 2
По умолчанию Сокращение дробей на С

помогите,пожалуйста,понять где ошибка. Я запускаю программу и у меня она зависает после того,как я ввожу числитель
Код:
#include <stdio.h>
#include <stdlib.h>


typedef struct rational_fraction
{   int numerator;/* числитель*/
  int denominator;
  /* знаменатель*/
} fraction;

void input (fraction *pd);//Ввод дроби
  void out (fraction dr);
  fraction add (fraction dr1, fraction dr2);
  void sub (fraction dr1, fraction dr2, fraction * pdr);
  fraction * mult(fraction dr1, fraction dr2);
  fraction divide (fraction *pd1, fraction *pd2);




void input (fraction *pd)
{
    int N;
    printf("\nChislitel:");
    scanf("%d",pd ->numerator);
    printf("Znamenatel:");
    scanf("%d",&N);

    if (N==0)
    {
        printf ("\nОшибка! Нулевой знаменатель!");
        exit (0);

    }
    pd-> denominator=N;
}
void out (fraction dr)
{
    printf ("Rac. drob':");
    printf ("%d/%d",dr.numerator,dr.denominator);
}
fraction add (fraction dr1, fraction dr2)
{
    fraction dr;
    dr.numerator=dr1.numerator*dr2.denominator+dr1.denominator*dr2.numerator;
    dr.denominator=dr1.denominator*dr2.denominator;
    return dr;

}
void sub (fraction dr1, fraction dr2, fraction *pdr)
{
    pdr -> numerator=dr1.numerator* dr2.numerator-dr2.numerator* dr1.denominator;
    pdr ->denominator= dr1.denominator*dr2.denominator;

}
fraction *mult(fraction dr1, fraction dr2)
{
    fraction *mul;
    mul=(fraction *) malloc (sizeof (fraction));
    mul ->numerator=dr1.numerator*dr2.numerator;
    mul ->denominator=dr1.denominator*dr2.denominator;
    return mul;
}
fraction divide(fraction *pd1,fraction * pd2)
{
    fraction d;
    d.numerator= pd1->numerator* pd2 ->denominator;
    d.denominator= pd1->denominator*pd2->numerator;
    return d;
}

void main()
{
fraction a=0,b=0,c=0;
fraction *p;
 printf ("\nVvedite drob':");

 input(&a);
 input(&b);
 c=add(a,b);
 out (c);
 p=mult(a,b);
 out (*p);
 free (p);
 c=divide(&a,&b);
 out (c);
	}

Последний раз редактировалось Stilet; 02.10.2012 в 21:01.
Olala94 вне форума Ответить с цитированием
Старый 02.10.2012, 21:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты умеешь работать с отладчиком?
Умеешь проходить по программе по шагам?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2012, 21:18   #3
Olala94
Новичок
Джуниор
 
Регистрация: 02.10.2012
Сообщений: 2
По умолчанию

ну умею я с отладчиком работать. ТОлько мне это как-то не особо помогло ПОНЯТь что не так
Olala94 вне форума Ответить с цитированием
Старый 02.10.2012, 21:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну что тут не понять?
Пошаговкой прогоняешь программу, и смотришь на каком ее блоке зацикливание слишком долгое получается. Например в VS пошаговка - F10,F11 клавиши.
Попробуй выяснить хотя бы на какой строке зависает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокращение ответа STIFLER32 Microsoft Office Word 4 22.03.2012 18:41
Сокращение if AxenicX Общие вопросы C/C++ 2 07.11.2009 16:08
Сокращение вывода Nightwolf Microsoft Office Access 1 23.04.2009 08:33
сокращение дроби Demonmov Microsoft Office Excel 4 15.04.2009 11:54
Сокращение выражения Simon..14 Общие вопросы C/C++ 4 25.01.2009 13:33