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

Программа компилируется и включается,но при использовании вылетает и прерывается

13.11.2019, 19:02. Показов 2664. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задано с клавиатуры натуральное число N. Вычислить сумму конечного отрезка ряда:
(формула во вложении)Название: 477.png
Просмотров: 40

Размер: 488 байт

вот написаный мною код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
 
int main(){
    int N,k,fact,sum,R;
    printf("Press N:\n");
    scanf("%d",&N);
    for(k=0;k<N;k++){
        sum=1/2+1/3+1/k+1;
        for(k=0;k<N;k++){
            fact *=k;
        }
        R=sum/fact;
        printf("%d",R);
    }
    
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2019, 19:02
Ответы с готовыми решениями:

При использовании аксессоров событий программа не компилируется
Всем привет! Возникла такая проблема: при использовании аксессоров событий программа не компилируется. class Observed { ...

Вылетает программа при использовании dll
итак. использую функции из dll. typedef void* HID_DEVICE; DWORD (*_HidDevice_GetNumHidDevices)(WORD, WORD);//вроде как указатель на...

Вылетает программа при использовании функции класса
Есть класс Match: #include &quot;coefficient.h&quot; #include &quot;team.h&quot; #include &lt;QString&gt; #include &lt;QList&gt; class Match { public: ...

26
Заблокирован
13.11.2019, 19:19
Лучший ответ Сообщение было отмечено мама Стифлера как решение

Решение

не надо на ноль то делить
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
13.11.2019, 19:31
Все верно говорит Holiday13, смотрите у вас есть 2 строки где идет деление на ноль: 9 и 13 строки.
1
0 / 0 / 0
Регистрация: 13.11.2019
Сообщений: 2
13.11.2019, 19:39  [ТС]
А можно подробней,вот я поменял в 8 и 10 строках значение k(вместо 0 поставил 1),программа теперь функционирует,но не вычисляет формулу
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
13.11.2019, 20:18
Не очень силен в математике, поэтому подсказать не могу. Могу только сказать, что согласно формуле, 9 строка должна выглядеть так:
sum=1/2+1/3+1/(k+1)
а у вас просто было без скобок.
0
Заблокирован
13.11.2019, 20:47
Цитата Сообщение от danilpetro Посмотреть сообщение
1/2
что за фигня, целое на целое сколько будет?
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
13.11.2019, 21:33
я совсем отупел, нашел такую же задачу и ее решение: https://ipc.susu.ru/210-2.html?problem=561
то есть если ввести '5', то будет результат '111.398381'
так что ли формула тогда?
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{120}{\frac{1}{1}+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+\frac{1}{5}}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
13.11.2019, 22:42
Цитата Сообщение от danilpetro Посмотреть сообщение
Вычислить сумму конечного отрезка ряда:
И вы почему-то пришли к выводу, что такую задачу нужно решать в рамках целых типов?

Цитата Сообщение от danilpetro Посмотреть сообщение
программа теперь функционирует,но не вычисляет формулу
Почему-то никто пока не заметил, что переменная fact не инициализирована вообще. Поэтому в строке 13 никакого "деления на 0" нет. Вся работа с переменной fact - не определена. Неудивительно, что "программа не вычисляет формулу".

Цитата Сообщение от danilpetro Посмотреть сообщение
sum=1/2+1/3+1/k+1;
Цитата Сообщение от мама Стифлера Посмотреть сообщение
согласно формуле, 9 строка должна выглядеть так:
sum=1/2+1/3+1/(k+1)
а у вас просто было без скобок.
Обоим: Распространенные ошибки
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
13.11.2019, 23:17
TheCalligrapher, а ведь верно, а я думаю на что это намекает товарищ
Цитата Сообщение от Holiday13 Посмотреть сообщение
целое на целое сколько будет?
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
15.11.2019, 14:07
Сделал расчет, но есть один нюанс - точность расчета не достаточно точна, а хотелось бы точнее. Вот результат полученный в Exel - 111,398380929415 и это более точный результат. Если округлить хотя бы до 6 знаков то вот - 111,398381. В Си выдает - 111.39837646484375. Можно как то поправить точность?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
float n, fact = 1, sum, R;
printf("Press N:\n");
scanf("%f",&n);
for(int k=1; k<=n; k++)
{
    fact *=k;
    sum += (float)1/(k+1);
    R += fact/sum;
}
printf("\n%.15f\n", R);
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
15.11.2019, 20:45
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Можно как то поправить точность?
Во-первых, какую еще "точность"? У вас переменные sum и R по-прежнему не инициализированы. Ваша программа подсчитывает "мусор". Какой смысл вам что-то объяснять, если вы тупо игнорируете даже такие элементарные вещи?

Во-вторых, что за странная манера использовать тип float? Тип float предназначен для экономии памяти при хранении массивных данных. Он не предназначен для использования в вычислительном коде. Универсальным плавающим типом в языке С является тип double. Все плавающее программирование в С делается в типе double, если у вас нет каких-то уважительных причин использовать другие типы.

В-третьих, с чего это вообще переменная n у вас получила плавающий тип?
1
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
15.11.2019, 21:32
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У вас переменные sum и R по-прежнему не инициализированы
Согласен, там может быть мусор. Поставил нули.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-вторых, что за странная манера использовать тип float?
Я пробовал double, но компилятор ругается на 6 строку
Code
1
format '%f' expects argument of type 'float*', but argument 2 has type 'double*' [-Wformat=]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
с чего это вообще переменная n у вас получила плавающий тип?
Ну тут ее до кучи кинул, чтоб типы разные не создавать. А чем это плохо не пойму если честно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
15.11.2019, 21:48
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Ну тут ее до кучи кинул, чтоб типы разные не создавать.
То есть для переменной k вы почему-то не поленились создать отдельный "разный тип", а вот для n почему-то упорно не хотите, так?

Цитата Сообщение от мама Стифлера Посмотреть сообщение
Я пробовал double, но компилятор ругается на 6 строку
format '%f' expects argument of type 'float*', but argument 2 has type 'double*' [-Wformat=]
Разумеется, ругается. И в чем проблема просто указать правильный спецификатор формата вместо %f?
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
15.11.2019, 22:00
TheCalligrapher, я не знаю как надо, пробовал L но не получилось.
0
11 / 2 / 1
Регистрация: 01.11.2018
Сообщений: 42
15.11.2019, 22:43
спецификатор l в помощь.
будет время сделай себе свой принтф =)
всего лишь stdarg.h stdlib.h unistd.h библа тебе понадобится (остальное можно самому сделать "вроде")
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
    double n, fact = 1, sum, R;
    printf("Press N:\n");
    scanf("%lf",&n);
    for(int k=1; k<=n; k++)
    {
        fact *=k;
        sum += (float)1/(k+1);
        R += fact/sum;
    }
    printf("\n%.15f\n", R);
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
15.11.2019, 22:55
Цитата Сообщение от poppy1 Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(void)
{
    double n, fact = 1, sum, R;
    printf("Press N:\n");
    scanf("%lf",&n);
    for(int k=1; k<=n; k++)
    {
        fact *=k;
        sum += (float)1/(k+1);
        R += fact/sum;
    }
    printf("\n%.15f\n", R);
}
Как об стенку горох...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
    double fact = 1, sum = 0, R = 0;
    int n = 0;
    printf("Enter N:\n");
    scanf("%d", &n);
    for (int k = 1; k <= n; k++)
    {
        fact *= k;
        sum += 1. / (k + 1);
        R += fact / sum;
    }
    printf("%.15lf\n", R);
}
0
11 / 2 / 1
Регистрация: 01.11.2018
Сообщений: 42
16.11.2019, 01:01
TheCalligrapher, работая с даблами и зная что будут числа с плавающей я использую %f (%F) (%lf (%lF) для scanf()). И да lf в принтф удивил) когда %f встречается в stdarg принтф его априори кастует в дабл. Lf же числового типа ("%Lf", 0.5l); а чего только стоит длинная арифметика во флотах и знать что на 17 символе после запятой у тебя число ломается, то вообще страсть. Рекомендую ручками сделать принтф или сканф что бы потом об стенку принтфом не выводить lf
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
16.11.2019, 01:08
Цитата Сообщение от poppy1 Посмотреть сообщение
когда %f встречается в stdarg принтф его априори кастует в дабл.
Это прекрасно. Но на самом деле, что бы там куда ни кастовалось априори, разумнее следовать простому и единообразному правилу, единому и для printf, и для scanf:

%f float
%lf double
%Lf long double

И все.

Цитата Сообщение от poppy1 Посмотреть сообщение
что бы потом об стенку принтфом не выводить lf
??? Не вижу здесь никакого "об стенку".
0
11 / 2 / 1
Регистрация: 01.11.2018
Сообщений: 42
16.11.2019, 01:09
TheCalligrapher, врут гады!! а я по их типам писал свой принтф https://ru.wikipedia.org/wiki/... 0%B8_scanf
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
16.11.2019, 01:16
Цитата Сообщение от poppy1 Посмотреть сообщение
врут гады!!
Они не врут, они просто отстали от жизни. В первом стандартном C89/90 действительно не было %lf в printf, что создавало совершенно не нужную иллюзию "несогласованности" между printf и scanf. Это досадное упущение исправили в C99. Теперь в printf можно использовать %lf.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2019, 01:16
Помогаю со студенческими работами здесь

При использовании самописного DLL-инжектора программа(не инжектор) вылетает
Хелп! Я решил написать dll инжекторЗачем? Ну... Я один из разработчиков игры в стиле &quot;Реалистичный симулятор хакера&quot;(Сейчас...

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

Вылетает приложение при использовании Adobe Air
Создаю пустое приложение в adobe flash, Air для android , скидываю на телефон , при запуске вылетает с ошибкой . Android 5.1.1 nexus 5 ...

Динамическое выделение для массива структур. Программа вылетает без ошибок на использовании функции realloc
Здесь код: ссылка В массив структур нужно записать новый элемент, выделить для него память. Функция выглядит так: int resize(int line,...

Visual Studio 2010 вылетает с ошибкой при использовании MPI
При запуске программы вылетает ошибка &quot;Прекращена работа MS Visual Studio 2010&quot; Сигнатура проблемы: Имя события проблемы: BEX Имя...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru