Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
1

Работа с циклом (всё уже написано только найти ошибку)

07.10.2015, 16:51. Показов 1160. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть программы посчитать F=(M!+N!)/(M+N)!
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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float  M,N,Y,F;
    int i;
    printf("Даны натуральные числа N и M. Вычислить F. \n");
    printf("Введите натуральное число N = ");
    scanf("%f",&N);
    printf("Введите натуральное число M = ");
    scanf("%f",&M);
    {
    Y=M+N;
    for (i=1.0;i<=N;i++);
    {
        N=N*i;
    }
    for (i=1.0;i<=M;i++);
    {
        M=M*i;
    }
    for (i=1.0;i<=Y;i++);
    {
        Y=Y*i;
    }
    F=M+N;
    }
    printf("F = %f ",F);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2015, 16:51
Ответы с готовыми решениями:

Не могу определить ошибку в коде. Написано все с книги
Написал код с книги, перепроверил. Xcode ругается, проверил в онлайн компиляторе, ошибка такая:...

Удалить все строки в двумерном массиве, содержащие только нечетные элементы. (Не могу найти ошибку.)
Задание: Удалить все строки в двумерном массиве, содержащие только нечетные элементы. Не могу...

Не могу найти ошибку(программа с циклом for)
Дано натуральное число n. Вычислить (1+1/(1^2))*(1+1/(1^2)).....(1+1/(n^2)) #include...

Задача на максимальное число делителей (95% уже написано)
Добрый день, никак не могу понять как мне вывести число у которого максимальное количество...

17
Музыка нас Связала
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
07.10.2015, 17:36 2
Цитата Сообщение от wlad1234 Посмотреть сообщение
только найти ошибку
И в чём она заключается? Считает неверно? не компилится? Снег не выпал?

З.Ы.

* Цикл нужен лишь до {N, M, Y}
* F неверное значение по условию ((M+N) / Y)
* Смысл делать i = 1.0, если i - это инт?
0
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 17:50  [ТС] 3
задача считает неправильно если проверить по калькуляторы. Хотелось бы конкретики в какой строчке и какая ошибка...

Добавлено через 5 минут
Как бы то ни было с учетом ваших замечаний результат неизменен((
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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float  M,N,Y,F,i;
    printf("Даны натуральные числа N и M. Вычислить F. \n");
    printf("Введите натуральное число N = ");
    scanf("%f",&N);
    printf("Введите натуральное число M = ");
    scanf("%f",&M);
    Y=M+N;
    for (i=1.0;i<=N;i++);
    {
        N=N*i;
    }
    for (i=1.0;i<=M;i++);
    {
        M=M*i;
    }
    for (i=1.0;i<=Y;i++);
    {
        Y=Y*i;
    }
    F=((M + N)/Y);
    printf("F = %f ",F);
    return 0;
}
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.10.2015, 17:59 4
Цитата Сообщение от wlad1234 Посмотреть сообщение
задача считает неправильно если проверить по калькуляторы.
Плохой калькулятор.

Цитата Сообщение от wlad1234 Посмотреть сообщение
Как бы то ни было с учетом ваших замечаний результат неизменен((
Охосспадя, он понял это так, что i надо сделать типа float... Написать нормально, что ли? Из жалости.
0
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 18:19  [ТС] 5
как бы к какому типу данных я отнесу i,не имеет особого значения
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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float  M,N,Y,F;
    int i;
    printf("Даны натуральные числа N и M. Вычислить F. \n");
    printf("Введите натуральное число N = ");
    scanf("%f",&N);
    printf("Введите натуральное число M = ");
    scanf("%f",&M);
    Y=M+N;
    for (i=1;i<=N;i++);
    {
        N=N*i;
    }
    for (i=1;i<=M;i++);
    {
        M=M*i;
    }
    for (i=1;i<=Y;i++);
    {
        Y=Y*i;
    }
    F=((M + N)/Y);
    printf("F = %f ",F);
    return 0;
Добавлено через 13 минут
проверял на разных калькуляторах что то не так..(
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 18:24 6
wlad1234, а зачем последний цикл с Y? В формуле у тебя четко написано сумма факториалов, деленная на сумму значений N и M.
Получается, что последний цикл не нужен.
Представь, каким у тебя будет Y, после выполнения цикла, допустим взял ты за исходные данные 8 и 9. Факториал N и M твоя программа посчитает, а вот как быть с Y, который у тебя получился равным 17
0
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 18:30  [ТС] 7
посчитать факториал 17 и на него разделить.
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 18:36 8
wlad1234, извиняюсь, не заметил в условии, что нужен факториал суммы.
А какие ты пробовал подставлять исходные данные?
Если ты подставляешь слишком большие, то просто напросто твоя переменная не вмещает числа таких размеров
0
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 18:39  [ТС] 9
я пробывал 4 и 6
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 18:56 10
wlad1234, и еще. Заметил только сейчас. У тебя выполняются пустые циклы.. после каждого for() у тебя стоит точка с запятой..
А вообще лучше бы вынести отдельную функцию, которая считала бы факториал. Твоя программа сократилась бы в разы
0
Музыка нас Связала
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
07.10.2015, 18:58 11
wlad1234, Пичалька, не читаем. Цикл не должен быть до N, M и Y включительно. Раз. В каждом шаге итерации этот предел меняется. Два. Считывай факториал в другую переменную.
0
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 19:04  [ТС] 12
не могли бы вы написать конкретный пример считывания в отдельну переменную, буду очень признателен просто я не очень понемаю ведь только начинаю познавать этот язык програмирования..

Добавлено через 2 минуты
буду признателен за полное переделывание хотя бы 1-ого цикла))
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 19:37 13
Лучший ответ Сообщение было отмечено wlad1234 как решение

Решение

Вот так тебе будет понятно?

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
#include <stdio.h>
#include <stdlib.h>
 
float factorial(float n)
{
    int f = 1;
    for(int i = 1; i <= n; i++)
       f *= i;
    return f;
}
int main()
{
    float N, M;
    double F ;
    
    printf("Enter  N = ");
    scanf("%f",&N);
    printf("Enter M = ");
    scanf("%f",&M);
    
    
    F = (factorial(N)+factorial(M))/factorial(N+M);
    printf("F = %f ", F);
    return 0;
}
Извиняюсь, что факториал принимает и возвращает тип float, просто, не знаю как приводить из int к float на С.
1
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 19:45  [ТС] 14
дело в том что сложность моей задачи в вычислении факториала, а на си нет такой функции что есть в с++
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 20:09 15
Лучший ответ Сообщение было отмечено wlad1234 как решение

Решение

wlad1234, ну я и написал выше эту функцию.. над функцией main.
1
2 / 2 / 0
Регистрация: 08.10.2014
Сообщений: 64
07.10.2015, 20:50  [ТС] 16
scales007, СПАСИБО большое человеческое за помощь начинающему программисту, ВСЁ получилось!
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
07.10.2015, 21:08 17
Жутко неэффективно. Я бы сделал так.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void) {
    int n, m;
    do { printf("\nInput N M: "); } while (scanf("%d %d", &n, &m) != 2);
    if (n < 1 || m < 1) { return 1; }
    int y = n + m;
    double fac_n, fac_m;
    double fac_y = 1.0;
    for (int i = 1; i <= y; i++) {
        fac_y *= (double)i;
        if (i == n) { fac_n = fac_y; }
        if (i == m) { fac_m = fac_y; }
    }
    printf("\nF = %f\n", (fac_n + fac_m) / fac_y);
    return 0;
}
0
18 / 18 / 9
Регистрация: 09.07.2015
Сообщений: 91
Записей в блоге: 2
07.10.2015, 21:18 18
Vtulhu, а ни кто об эффективности и не говорил.. Тут скорее понятность была нужна.. человек, так же как и я, в процессе обучения..
Плюс, еще объявлено целых 6 переменных, три из которых double. Кругом циклы и условия.
Я могу и ошибаться конечно, но мне кажется не особо читателен Ваш код. На счет эффективности не могу сказать точно.
Еще раз скажу, что могу и ошибаться)) просто выразил мнение)
0
07.10.2015, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2015, 21:18
Помогаю со студенческими работами здесь

Решение примера циклом. Не могу найти ошибку. В ответе получается 0
Задание такое: Обозначим f = 1/(i^2 +1) + 1/(i^2 +2) + ... + 1/(i^2 + i + 1) , i = 1, 2, ... n -...

Не могу найти ошибку в коде уже третий день
Вот код для поиска по сайту: &lt;?php include_once (&quot;../db/db.php&quot;); ?&gt; &lt;!DOCTYPE html&gt; &lt;html&gt;...

игра домино.код уже есть! найти ошибку!
условие: Кости домино.Известен набор костей домино для каждого из двух игроков. //Необходимо...

Не как не могу найти ошибку уже более часа
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #define...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru