Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
1

Выдает ошибки с функцией в си

03.03.2019, 12:07. Просмотров 2396. Ответов 14
Метки си (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <conio.h>
int fact(int f) {
     scanf(f);
      if (f=0) or (f=1) then fact:=1
        else fact:=f*fact(n-1);
    return fact;
 }
void main() {
int i,k,s;
    while (k>0){
     s=s+fact(k%10);
     k=k/10;
    }
    printf(s);
 
 
 
 }
задание:Найти n первых натуральных чисел, равных сумме факториалов
своих цифр. Например, 145=1!+4!+5!.
0
Миниатюры
Выдает ошибки с функцией в си  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2019, 12:07
Ответы с готовыми решениями:

Выдает синтаксические ошибки
Почему ошибки?

перепечатал с учебника-выдает ошибки
Подскажите в чем может быть дело. Перепечатал код один к одному из учебника: #include &lt;stdio.h&gt;...

списал с учебника-выдает ошибки
Посмотрите, пожалуйста, код. Списал с учебника, но компилатор кричит о массе ошибок. В чем может...

Не могу скомпилировать на dev c++, выдает ошибки
#include &lt;stdio.h&gt; void p1(int *m, int k) { int i; for(i=0;i&lt;k;i++) m=-1*m; } void...

Прога из Кернигана, выдает странные ошибки
В общем программа для подсчета слов #include &lt;stdio.h&gt; #define IN 1 #define OUT 0 main () {...

14
CoderPC
239 / 159 / 74
Регистрация: 12.02.2019
Сообщений: 521
03.03.2019, 12:17 2
а чего всего на 2х языках?
C
1
2
3
4
5
int fact(int f) 
{
    if (f<2) return 1;
    return  f*fact(n-1);
}
1
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 12:28  [ТС] 3
ой только перешел с паскаля и туплю))))
0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 12:29  [ТС] 4
CoderPC,
0
Миниатюры
Выдает ошибки с функцией в си  
03.03.2019, 12:29
CoderPC
239 / 159 / 74
Регистрация: 12.02.2019
Сообщений: 521
03.03.2019, 12:34 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int fact(int f) 
{
    if (f<2) return 1;
    return  f*fact(f-1);
}
void main() 
{
int i,k,s=0;
scanf("%d",&k);
    while (k>0){
     s=s+fact(k%10);
     k=k/10;
    }
    printf(s);
 }
0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 12:36  [ТС] 6
я уже заменил n на f выводит эту ошибку
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <conio.h>
int fact(int f)
{
    if (f<2) return 1;
    return  f*fact(f-1);
}
void main() {
int i,k,s;
scanf(k);
    while (k>0){
     s=s+fact(k%10);
     k=k/10;
    }
    printf(s);
 }
0
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 12:46  [ТС] 7
CoderPC,
0
Миниатюры
Выдает ошибки с функцией в си  
CoderPC
239 / 159 / 74
Регистрация: 12.02.2019
Сообщений: 521
03.03.2019, 13:02 8
C
1
2
3
4
5
    int k,s=1;
    scanf("%d",&k);
    for(; k>2; k/=10)
     s+=fact(k%10);
    printf("%d\n",s);
Добавлено через 7 минут
что за черт
C
1
2
3
4
5
6
    int k,s=1;
    scanf("%d",&k);
    if(k>1)
    for(; k; k/=10)
     s+=fact(k%10);
    printf("%d\n",s);
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
03.03.2019, 13:48 9
Лучший ответ Сообщение было отмечено Бодрый666 как решение

Решение

Если даже заставить это работать, алгоритм - хуже не придумаешь! Учитывая, что следующее такое число 40585, факториал одних и тех же чисел (пусть и однозначных) пересчитается мягко говоря не раз (да ещё и рекурсивно). Короче, по-любому незачёт!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main(void) {
    unsigned df[10] = { 1 }, n, i, j, sum;
 
    for ( i = 1; i < 10; ++i )
        df[i] = df[i - 1] * i;
 
    while ( printf("N = ") && scanf("%u", &n) == 1 && n ) {
        for ( i = 1; i <= n; ++i ) {
            sum = 0;
            for ( j = i; j; j /= 10 ) 
                sum += df[j % 10];
            if ( sum == i )
                printf("%u\n", i);
        }
        printf("\n");
    }
 
    return 0;
}
Код
[andrew@easybook numbers]$ gcc -Wall digit_factorials_sum.c 
[andrew@easybook numbers]$ ./a.out 
N = 150
1
2
145

N = 500
1
2
145

N = 10000
1
2
145

N = 100000
1
2
145
40585

N =
1
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 13:58  [ТС] 10
CoderPC, можете объяснить к и к/=10 в цикле фор?

Добавлено через 7 минут
easybudda, где вы описали функцию df?
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
03.03.2019, 14:08 11
Цитата Сообщение от easybudda Посмотреть сообщение
for ( j = i; j; j /= 10 )
Код
для ( j = i; j не равно 0; j разделить на 10, результат присвоить j )
короткая форма записи j = j / 10

Добавлено через 1 минуту
Цитата Сообщение от Бодрый666 Посмотреть сообщение
easybudda, где вы описали функцию df?
Это не функция, это массив из факториалов чисел от 0 до 9 включительно
df = digit factorials
1
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 17:53  [ТС] 12
easybudda, scanf("%u", &n) == 1 && n можете это объяснить?

Добавлено через 18 минут
easybudda, вы можете тут выделить 2 функции, а то я только начинаю, у меня не выходит
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
#include <stdio.h>
#include <math.h>
void fact()
{
    unsigned df[10]={1};
    int i;
    for ( i = 1; i < 10; ++i )
        df[i] = df[i - 1] * i;
        return(df[10]);
}
 
int main(void) {
    unsigned df[10] = { 1 }, n, i, j, sum;
fact();
    while ( printf("N = ") && scanf("%u", &n) == 1 && n ) {
        for ( i = 1; i <= n; ++i ) {
            sum = 0;
            for ( j = i; j; j /= 10 )
                sum += df[j % 10];
            if ( sum == i )
                printf("%u\n", i);
        }
        printf("\n");
    }
 
    return 0;
}
Добавлено через 40 минут
easybudda,
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>
 int jack(unsigned df);
 
int main()
{
    unsigned df[10] = { 1 }, n, i, j, sum;
 
    for ( i = 1; i < 10; ++i )
        df[i] = df[i - 1] * i;
 
    jack(df[10]);
 
    return 0;
}
 
int jack(unsigned df)
 {
     int n, i, j, sum;
 
    while ( printf("N = ") && scanf("%u", &n) == 1 && n ) {
        for ( i = 1; i <= n; ++i ) {
            sum = 0;
            for ( j = i; j; j /= 10 )
                sum += df[j % 10];
            if ( sum == i )
                printf("%u\n", i);
        }
        printf("\n");
    }
    return 0;
 }
Добавлено через 10 минут
easybudda, я выделил, но не понимаю ( printf("N = ") && scanf("%u", &n) == 1 && n ) это(зачем принтф и ==1 && n
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
03.03.2019, 19:09 13
Бодрый666, scanf возвращает количество удачно присвоенных значений (man scanf). Соответственно scanf("%u", &n) вернёт 1, если функции удастся прочитать и присвоить переменной с указанным адресом значение типа unsigned. Вся конструкция дословно значит:
Цитата Сообщение от Бодрый666 Посмотреть сообщение
( printf("N = ") && scanf("%u", &n) == 1 && n )
Код
пока ( printf вернула значение, отличное от 0, и scanf вернула 1 и значение n отлично от 0 )
ТруЪ паранойды и результат printf проверяют, но по-моему это лишнее, по крайней мере в учебных примерах.

Цитата Сообщение от Бодрый666 Посмотреть сообщение
вы можете тут выделить 2 функции
Дао в том чтобы была программа непременно с двумя функциями?
1
Бодрый666
3 / 3 / 0
Регистрация: 26.10.2018
Сообщений: 96
03.03.2019, 19:56  [ТС] 14
easybudda, ну я выделил функцию вывода и у main же тоже считается за функцию)))) так что огромное спасибо за все
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
03.03.2019, 22:17 15
Цитата Сообщение от Бодрый666 Посмотреть сообщение
огромное спасибо за все
anytime
0
03.03.2019, 22:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2019, 22:17

Ввод и вывод из файла не работает — выдает ошибки
#include &lt;iostream&gt; #include&lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; #include &quot;stdafx.h&quot;...

Проверьте код,выдает ошибки,а как исправить их не могу
Суть в том,что надо проверь слова из строки на условия: 1)начало и конец слова начинается на одну...

Выдает ошибки : фунция инт отличается от косвенного обращения от int*
#define _CRT_SECURE_NO_WARNINGS #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; int m; int...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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