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

Сокращение дроби - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ компилятор http://www.cyberforum.ru/cpp-beginners/thread710032.html
Здравствуйте! Посоветуйте, какой мне нужно установить компилятор, чтоб я могда работать с графикой, динамич. структурами и т.д. Желательно с ссылкой и без вирусов. Заранее благодарю!)
C++ Считывание из файла Дан файл, содержащий значения среднесуточной температуры воздуха за каждый день 2011 года в формате: 01.01.2011 -18 02.01.2011 -21 ... 04.04.2011 +05 http://www.cyberforum.ru/cpp-beginners/thread710031.html
Задачи для изучения ООП C++
Всем доброго времени суток. Подскажите хорошую книгу (сборник задач) или сайт, где есть много задачек об ООП и не только ( чтобы было разделено по главах, например методы класса, конструкторы, деструкторы, связанные списки ) Хотелось бы попрактиковаться недельку-другую :) Буду благодарен за советы.
C++ С помощью записи «указатель-индекс» определить сумму четных элементов массива, сумму элементов
Создать и вывести на экран массив из 10-ти чисел-квадратов 1^2, 2^2,3^2, .. С помощью записи «указатель-индекс» определить сумму четных элементов массива, сумму элементов и вывести эти данные на экран.
C++ Создание процессов http://www.cyberforum.ru/cpp-beginners/thread710012.html
Здравствуйте! помогите,пожалуйста разобраться с задачей! Статистический анализ. Имеется несколько массивов данных (разного размера). Требуется определить математическое ожидание в каждом массиве. Обработка каждого массива выполняется в отдельном процессе (потоке). Массив создать и подсчитать мат ожидание могу,но вот насчет процессов ничего не знаю и не понимаю. помогите,пожалуйста.((((
C++ переделать программу через указатели очень нужна ваша помощь #include<math.h> #include<stdio.h> #include <conio.h> void main () {int x,a; float y; FILE*vivod;vivod=fopen("C:\Documents and Settings\Лена\Рабочий стол\Учёба\2 курс\Лаботаторные с++\мои работы\1.txt","w"); подробнее

Показать сообщение отдельно
ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 19:11     Сокращение дроби
позже я вам напишу более разумный вариант с комментариями, приведенный выше - бред какой-то

Добавлено через 22 часа 0 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
typedef unsigned int uint;
 
int main(){
  setlocale(LC_ALL, "rus");
  
  uint nMenu = 0; // меню
  uint nNumerator = 0; // числитель
  uint nDenominator = 0; // знаменатель
  uint nMostCommonMultiple = 0; // наибольшее общее кратное
 
  // вывод меню
  cout << "Выберите ваше действие:" << endl;
  cout << "1. Ввести дробь" << endl;
  cout << "0. Завершить программу" << endl;
  cout << "Ваш выбор: ";
  
  // запускаем цикл выбора меню и его обработку
  while(cin >> nMenu && nMenu != 0){
    switch(nMenu) {
      // если выбран вариант ввода дроби
      case 1:
        cout << "Введите числитель: ";
        cin >> nNumerator; // вводим числитель
        cout << "Введите знаменатель: ";
        cin >> nDenominator; // вводим знаменатель
 
        // наибольшее общее кратное = числитель
        nMostCommonMultiple = nNumerator;
 
        // запускаем цикл для поиска наибольшего общего кратного
        // наибольшее общее кратное != 1 (1 - наименьшее общее кратное)
        while(nMostCommonMultiple > 1) {
          // проверяем, если числитель и знаменатель делятся на наибольшее общее кратное
          // без остатка, то выводим сокращенную дробь и прерываем цикл проверки
          if((nNumerator % nMostCommonMultiple) == 0 && (nDenominator % nMostCommonMultiple) == 0){
            cout << "Наибольшее общее кратное = " << nMostCommonMultiple << endl;
            // если числитель больше знаменателя или числитель равен знаменателю
            // и деление числителя на знаменатель не дает остатка, то это будет целое число
            if((nNumerator > nDenominator || nNumerator == nDenominator)&& nNumerator % nDenominator == 0)
              cout << "Сокращенная дробь: " << nNumerator/nDenominator << endl;
            // если числитель больше знаменателя
            // выводим целую часть и дробную часть в виде 1(2/3)- одна целая и две третьих
            else if(nNumerator > nDenominator) {
              cout << "Сокращенная дробь: " << nNumerator/nDenominator << "("
              << (nNumerator/nMostCommonMultiple) - (nDenominator/nMostCommonMultiple) << "|"
              << nDenominator/nMostCommonMultiple << ")" << endl;
            }
            // если целой части нет, то просто выводим сокращенную дробь
            else
              cout << "Сокращенная дробь: " << nNumerator/nMostCommonMultiple << "|" << nDenominator/nMostCommonMultiple << endl;
            break;
          }
          
          // если при делении числителя и знаменателя на наибольшее общее кратное
          // есть остаток, то просто уменьшаем наибольшее общее кратное на 1 и продолжаем проверку
          --nMostCommonMultiple;
        }
        
        // если же наибольшее общее кратное = 1, то дробь невозможно сократить
        if(nMostCommonMultiple == 1)
          cout << "Невозможно сократить дробь" << endl << endl;
        break;
 
        // обработка неверных вариантов выбора меню
        default:
        break;
    }
    // после обработки дроби выводим снова меню
    cout << "Выберите ваше действие:" << endl;
    cout << "1. Ввести дробь" << endl;
    cout << "0. Завершить программу" << endl;
    cout << "Ваш выбор: ";
  }
 
  system("pause");
return 0;
}
Добавлено через 6 минут
вот результат работы программы:
[img]http://s018.***********/i508/1211/b7/dfc3e28f38ect.jpg[/img]

Добавлено через 24 минуты
еще забыл дописать, что это самый простой вариант
данный алгоритм будет долго работать при больших числах
вернусь с работы, выложу более облегченный и быстрый вариант
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru