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

Нахождение среднего значения дробей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить последовательность число цифр которой равно знаменателю, а сумма этих цифр -числителю http://www.cyberforum.ru/cpp-beginners/thread1233576.html
Доброго всем времени суток!Пожалуйста помогите сформировать вектор. Дана правильная несократимая дробь нужно получить последовательность число цифр которой равно знаменателю,а сумма этих цифр -числителю.Напечатать в виде 1.1.2.1.2; Вот мой вариант. #include <iostream> #include <stdlib.h> #include <vector> #include <algorithm> #include <iterator> #include <iomanip>
C++ Массивы. Классы. Нахождение среднего значения дробей Напишите функцию main(), которая получает случайные дробные числа от пользователя, сохраняет их в массиве типа fraction, вычисляет среднее значение и выводит результат. т.е. пользователь вводит к примеру 1/2, 2/3, 3/4, 4/5 а в ответ получает среднее значение 419/720 программа работает неправильно, выводит ноли. где ошибка? #include "stdafx.h" #include <iostream> #include <cmath>... http://www.cyberforum.ru/cpp-beginners/thread1233558.html
C++ Функция должна возвращать новый массив, состоящий из отрицательных элементов исходного массива
У меня есть задание: написать функцию (процедуру) с параметрами для обработки одномерного массива целочисленных данных (количество элементов массива ≤50). Функция (процедура) должна возвращать новый массив, состоящий из отрицательных элементов исходного массива. Есть функция, мне помогли ее написать: int otricatel (int mass, int n,int result) { int count=0; for(int...
C++ Как работает функции подсчёта символов в строке
Раньше программировал на VB. Сейчас изучаю С++. Встретил в интернете эти функции подсчёта симолов в строке. С первой всё понятно. Перебираем символы пока не встретим '\0'. int strlen(char s){ int length = 0; for (; s != '\0'; length++); return (length); } Но почему работают две эти?
C++ Функция должна возвращать наименьший положительный элемент массива http://www.cyberforum.ru/cpp-beginners/thread1233510.html
Помогите, не могу написать этот клочек кода...голова кипит.. Есть постановка задания: Написать функцию (процедуру) с параметрами для обработки одномерного массива целочисленных данных (количество элементов массива ≤50). Функция (процедура) должна возвращать наименьший положительный элемент массива.
C++ Ошибка "Ascess violation" при выводе массива В проекте есть две такие строчки: for(int L6x=0;L6x<=argcnt;L6x++){for(int L6y=0;L6y<argsize;L6y++){cout<<ComArgumentList;}cout<<endl;} for(int L7=0;L7<=argcnt;L7++)delete ComArgumentList;delete ComArgumentList; Первая выводит содержимое двухмерного массива символов, а вторая удаляет его. Если хотя бы одна из этих строчек присутствует, то выскакивает ошибка "Ascess violation: write on adress... подробнее

Показать сообщение отдельно
Ev_Hyper
Заблокирован
25.07.2014, 09:59     Нахождение среднего значения дробей
Pari, вот тут у вас ошибка:

C++ (Qt)
1
        frtemp.add_fr(fraction[j], fraction[j++]);
j++ - постфиксная форма, а значит вы складываете дробь саму с собой.
Перепишите этот цикл вот так:
C++ (Qt)
1
2
3
4
5
    for (int j = 0; j<n; j+=2) //сложение дробей
    {
        frtemp.add_fr(fraction[j], fraction[j+1]);
        frsum.add_fr(frtemp, frsum);
    }
Далее ошибка тут-же, но уже алгоритмическая.
C++ (Qt)
1
2
3
4
5
        void add_fr(Fraction f1, Fraction f2) //метод сложения двух дробей
        {
            numerator = f1.numerator * f2.denominator + f1.denominator * f2.numerator; 
            denominator = f1.denominator * f2.denominator;
        }
Так как переменная "сумма" по умолчанию у вас равна 0, то во всех случаях результат будет 0/0.
Как один из вариантов решения проблемы, добавьте проверку:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
 void add_fr(Fraction f1, Fraction f2) //метод сложения двух дробей
        {
            if(f1.denominator !=0 && f2.denominator!=0){
            numerator = f1.numerator * f2.denominator + f1.denominator * f2.numerator; 
            denominator = f1.denominator * f2.denominator;
            }
            else 
            {
                numerator = f1.numerator;
                denominator = f1.denominator;
            }
        }
Но все-же проверку на то, что знаменатель !=0 нужно сделать при вводе значений.
После такого исправления решение тестового примера дало 163/300. Где-то ошибка - идем дальше.
В строке 69, нужно изменить с (n+1) на n. Так как у вас при считывании идет (n++), значит при вводе 4 дроби n = 4, т.е. количеству элементов.
C++ (Qt)
1
frsum.mul_fr(frsum, n); //деление на их кол-во
Запускаем, увы...результат не тот который нужен. Смотрим:
Кликните здесь для просмотра всего текста

Код
enter fraction
1/2
continue typing? (y/n)
y
enter fraction
2/3
continue typing? (y/n)
y
enter fraction
3/4
continue typing? (y/n)
y
enter fraction
4/5
continue typing? (y/n)
n

the average is 326/120
 4

the average is 326/480

the average is 163/240
Для продолжения нажмите любую клавишу . . .

В чем же ошибка?
Проверяем:
суммирует правильно:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{2}+\frac{2}{3}+\frac{3}{4}+\frac{4}{5}=<br />
\frac{7}{6}+\frac{3}{4}+\frac{4}{5}=<br />
\frac{28+18}{24}+\frac{4}{5}=<br />
\frac{230+96}{120}=\frac{326}{120}
деление на кол-во то-же.
от сокращения результат не измениться, но
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{326}{120}=0.67916... т.е. грубо говоря в районе 2/3.
Сравнивам с
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{419}{720}=0.58194... т.е. примерно 14/24.
чисто логически первый вариант более правильный, чем тот, который привел вы.
 
Текущее время: 02:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru