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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2012, 01:40   #1
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию Умножение дробей - всегда нулевой результат

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

Код:
#include <iostream>
using namespace std;
struct drob
{
	int chis;
	int znam;
};

int plus(drob,drob);
int minus(drob,drob);
int umnoj(drob,drob);
int del(drob,drob);

int main()
{
	drob drob1, drob2;
	cout << "Pervaya drob': ";
	cin  >> drob1.chis >> drob1.znam;
	char znak;
	double otv;
	cout << "Znak: ";
	cin  >> znak;
	cout << "Vtoraya drob': ";
	cin	 >> drob2.chis >> drob2.znam;
	switch(znak)	
	{
	case '+':
		otv=plus(drob1,drob2);
		break;
	case '-':
		otv=minus(drob1,drob2);
		break;
	case '/':
		otv=del(drob1,drob2);
		break;
	case '*':
		otv=umnoj(drob1,drob2);
		break;
	default: break;
	}
	cout << otv << endl;
	return 0;
}

//slojenie
int plus(drob dd1,drob dd2)
{
	double ans;
	ans = (dd1.chis*dd2.znam + dd1.znam*dd2.chis)/(dd1.znam*dd2.znam);
	return ans;
}
//vi4itanie
int minus(drob dd1,drob dd2)
{
	double ans;
	ans = (dd1.chis*dd2.znam - dd1.znam*dd2.chis)/(dd1.znam*dd2.znam);
	return ans;
}
//umnojenie
int umnoj(drob dd1, drob dd2)
{
	double ans;
	ans = (dd1.chis*dd2.chis)/(dd1.znam*dd2.znam);
	return ans;
}
//delenie
int del(drob dd1, drob dd2)
{
	double ans;
	ans = (dd1.chis*dd2.znam)*(dd1.znam*dd2.chis);
	return ans;
}
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 30.05.2012, 01:42   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Умножение дробей - всегда нулевой результат
ну это наверно потому что тип возвращаемы у вас int
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.05.2012, 01:47   #3
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
ну это наверно потому что тип возвращаемы у вас int
то есть сделать так

Код:
double umnoj(drob,drob);
/////////////////
double umnoj(drob dd1, drob dd2)
{
	double ans;
	ans = (dd1.chis*dd2.chis)/(dd1.znam*dd2.znam);
	return ans;
}
я верно понял? попробовал, не вышло
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 30.05.2012, 01:54   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

а то что структура у вас целочисленная? это вы как думаете не важно?
вы опять же делите целое на целое получается целое а ток после это оно конвертируется в дробное
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.05.2012, 01:59   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Эх ... Специально определить структуру дроби, чтобы под конец все испортить делением двух int и присвоением нулевого результата типа int в double.
Может все-таки и возвращать новый тип drob ?
EUGY вне форума Ответить с цитированием
Старый 30.05.2012, 02:00   #6
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
а то что структура у вас целочисленная? это вы как думаете не важно?
вы опять же делите целое на целое получается целое а ток после это оно конвертируется в дробное
спасибо!

и, если не сложно, вы бы не могли мне объяснить один момент:
встречал иногда вот такие записи
Код:
double PI=3.14F
для чего нужно F в конце?
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 30.05.2012, 09:37   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

говорит компилятору, что это float
p51x вне форума Ответить с цитированием
Старый 30.05.2012, 09:49   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Эх ... Специально определить структуру дроби, чтобы под конец все испортить делением двух int и присвоением нулевого результата типа int в double.
Может все-таки и возвращать новый тип drob ?
Что за тип? Не знаю такого. Вразумите.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 30.05.2012, 10:54   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
drob plus(drob,drob);
drob minus(drob,drob);
drob umnoj(drob,drob);
drob del(drob,drob);
Вот такие функции вам нужно реализовать, а не int'овские. Ну и для удобства функцию типа
Код:
void PrintDrob(drob x)
{
cout << x.chis << "/" << x.znam;
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пакеты нулевой длины ardilla C/C++ Сетевое программирование 3 10.04.2011 13:02
Код не всегда выдает правильный результат Maxx Microsoft Office Excel 2 18.02.2010 15:59
не видит нулевой символ!!! Wi1D Общие вопросы C/C++ 8 09.12.2009 22:00
Нулевой массив? mutabor Общие вопросы Delphi 2 08.12.2009 18:07
Всегда позади и всегда впереди в одном приложении Legat Win Api 4 27.10.2007 15:48