Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
1

Задача с вложенными циклами и динамическим программированием

28.10.2017, 20:16. Просмотров 885. Ответов 16
Метки си (Все метки)

Добрый день!Программы на языке 'C'. Такой вопрос,почему данная программа не высчитывает ответ по заданному кол-ву циклов,ответ выдает S = 0.0000000,какие стоит внести корректировки,первая прога на динамическом программировании,вторая - с вложенными циклами:
Первая прога.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
 int n, i;
 float chisel, znamen;
 double s;
 printf("Pleas write n: ");
 scanf("%d", &n);
 znamen=1;
 chisel=0;
 for (i=1; i<=n; i++)
 {
    znamen=znamen+(((4*i)/3)-1);
    chisel=(i+sqrt(i));
    s=s*(chisel/znamen);
 }
printf("S=%.7f\n", s);
return 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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
 int n, i, j;
float chisel, znamen;
 double s;
 printf("Pleas write n: ");
 scanf("%d", &n);
 
 chisel=0;
 for (i=1; i<=n; i++)
 {
    chisel=(i+sqrt(i));
    znamen=1;
    for (j=1; j<=i; j++)
    {
        znamen=znamen+(((4*j)/3)-1);
    }
    s=s*(chisel/znamen);
 }
printf("S=%.7f\n", s);
return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2017, 20:16
Ответы с готовыми решениями:

Воспользоваться вложенными циклами и вывести алфавит по формату
Как написать прогу использая вложенные циклы чтоб она выводила символы следующим образом? A BC...

Задача с динамическим выделением памяти
Написать пользовательскую функцию на языке Си. Массивы А и В динамические, выделение памяти...

Задача на работу с динамическим массивом. HEAP CORRUPTION DETECTED
Не понимаю причину ошибки. Подскажите пожалуйста. // pmArray.cpp : Defines the entry point...

Циклы с вложенными циклами
Добрый день уважаемые форумчане. Помогите с программой на С++, необходимо составить программу для...

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

16
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
28.10.2017, 20:17  [ТС] 2
Вот само задание.
0
Миниатюры
Задача с вложенными циклами и динамическим программированием  
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
28.10.2017, 21:48 3
RedshapesofRed, вам приходилось слышать, что 1/2 дает 0 ?
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
28.10.2017, 22:31  [ТС] 4
Нет,но мне уже страшно)В чем суть ?
0
28.10.2017, 22:31
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
28.10.2017, 23:05 5
Лучший ответ Сообщение было отмечено RedshapesofRed как решение

Решение

Цитата Сообщение от RedshapesofRed Посмотреть сообщение
В чем суть ?
1 и 2 - целые числа. А в Си (и во многих других языках) деление целых чисел происходит НАЦЕЛО.
1/2 = 0
4/3 = 1
У тебя в строке 16 (1-й код) (((4*i)/3)-1);, i - int. При i=1 получаем (4*1)/3-1 = 1 - 1 = 0 и так далее
Во втором коде аналогично. Строка 20.
Исправиться можно так
C
1
(((4.0*i)/3)-1);
Добавлено через 1 минуту
Возможно, тебе не повредит эта тема
Распространенные ошибки

Добавлено через 2 минуты
Распространенные ошибки
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
29.10.2017, 12:29  [ТС] 6
Данное исправление не помогло

Добавлено через 10 минут
Пробовал делать каждое число с плавающей точкой(типа 4. * i),но это ситуацию не спасло.
0
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
29.10.2017, 14:31 7
Цитата Сообщение от RedshapesofRed Посмотреть сообщение
не помогло
Покажи новый код.
Да, еще ты переменную s не инициализируешь.
И давай заниматься только одним кодом. Ошибки в них идентичны.
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
29.10.2017, 15:48  [ТС] 8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
 int n, i;
 float chisel, znamen;
 double s;
 printf("Pleas write n: ");
 scanf("%d", &n);
 znamen=1;
 chisel=0;
 for (i=1; i<=n; i++)
 {
    znamen=znamen+(((4.0*i)/3.0)-1.0);
    chisel=(i+sqrt(i));
    s=s*(chisel/znamen);
 }
printf("S=%.7f\n", s);
return 0;
}
0
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
29.10.2017, 17:07 9
Цитата Сообщение от Байт Посмотреть сообщение
ты переменную s не инициализируешь.
Повнимательнее читай посты. Ты же хочешь, чтобы тебе помогли.
C
1
double s = 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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
 int n, i, j;
 float chisel, znamen;
 double s=0;
 printf("Pleas write n: ");
 scanf("%d", &n);
 znamen=1;
 chisel=0;
 for (i=1; i<=n; i++)
 {
    znamen=1;
    for (j=1; j<=i; j++)
      znamen*=(((4.0*i)/3.0)-1.0);
    chisel=(i+sqrt(i));
    s += chisel/znamen;
 }
printf("S=%.7f\n", s);
return 0;
}
Попробуй.
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
29.10.2017, 18:40  [ТС] 10
Вообщем, там вышло,но вот только у меня в знаменателе идет сумма и весь пример идет в умножении.Получается вот так, но не выходит ничего,опять ответ с нулями одними. Вот код:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
 int n, i, j;
 float chisel, znamen;
 double s=0;
 printf("Pleas write n: ");
 scanf("%d", &n);
 znamen=1;
 chisel=0;
 for (i=1; i<=n; i++)
 {
    znamen=1;
    for (j=1; j<=i; j++)
      znamen+=(((4.0*i)/3.0)-1.0);
    chisel=(i+sqrt(i));
    s *= chisel/znamen;
 }
printf("S=%.7f\n", s);
return 0;
}
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
29.10.2017, 18:41  [ТС] 11
Задание
0
Миниатюры
Задача с вложенными циклами и динамическим программированием  
MrGluck
30.10.2017, 13:26
  #12
 Комментарий модератора 
RedshapesofRed, не за чем дублировать задание. Если проблема актуальна, так и напишите "Проблема актуальна". При этом запрещено поднимать тему чаще 1 раза в сутки.
Для формул воспользуйтесь редактором формул.
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
31.10.2017, 18:21  [ТС] 13
Проблема актуальна.
0
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
31.10.2017, 18:43 14
Цитата Сообщение от RedshapesofRed Посмотреть сообщение
Проблема актуальна.
И будет актуально до тех пор, пока ты не поймешь, где надо использовать умножение, а где сложение.

Добавлено через 2 минуты
Внимательнее смотри на ответы. Если я твою ошибку исправляю, а долбишь все свое, то дальше говорить уже не охота. Для меня тема уже не актуальна. Именно с того момента, когда не внимательно прочтен мой ответ.
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
02.11.2017, 20:00  [ТС] 15
Не могли бы вы мне обьяснить, почему вместо умножения дроби идет ее прибавление к следующей в цикле, а в заменателе вместо того,чтобы в цикле прибавлять идет умножение,ведь в знаменателе именно знак суммы в цикле,а перед всей дробью - умножения, при этом вычисляя значения , ответ программы не совпадает с тем,что я считал,там при n=1 получается приблизительно 6, но дальше расходятся значения
0
RedshapesofRed
0 / 0 / 0
Регистрация: 23.10.2017
Сообщений: 20
07.11.2017, 19:58  [ТС] 16
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>
#include <math.h>
 
int main()
{
    int n,i,j,count=0;
    double p=1,znamen;
    printf("Please write n: ");
    scanf("%d", &n);
    for (i=1; i<=n; i++)
    {
        znamen=0;
        count++;
        for (j=1; j<=i; j++)
        {
            znamen+=(4.0*j)/3.0-1.0;
            count++;
        }
        p*= (i+sqrt(i))/znamen;
        count++;
    }
    printf("Dobutok=%.7f\nCount of operations=%d\n", p, count);
    return 0;
}
0
Байт
Эксперт C
20656 / 13147 / 2771
Регистрация: 24.12.2010
Сообщений: 27,652
07.11.2017, 20:20 17
RedshapesofRed, на "диагональный" взгляд уже похоже на правду. Работает?
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru