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

Разбить программу на функции

31.05.2009, 13:14. Показов 1943. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разбить пограмму на три функции: ввод, решение и вывод.Как ни пробую, всё ругается
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "locale.h" 
 
int main () 
{
    setlocale(LC_ALL,"Russian");
    int M;
    int **x, i, j, n;
    printf ("Введите размерность квадрата чисел ");
    scanf("%d",&n);
    x = (int **)malloc(sizeof(int)*n);
    
    for (i=0; i<n; i++)
        x[i] = (int *)malloc(sizeof(int*)*n);
    printf("\nВведите элементы квадрата\n");
    for (i=0; i<n; i++)
            for (j=0; j<n; j++)
            {
                printf("x[%d][%d]= ",i,j);
                scanf("%d",&(x[i][j]));
            }
    ////////////////эхо контроль введённых данных
        printf("\n");
        printf("Введенный квадрат \n");
 
        for(i=0;i<n;i++)
        {
            for (j=0;j<n;j++)           
            printf("\t%d ",(x[i][j]));
            printf("\n");
        }
 
 
 
/////Решение
 
    int *s,*t,d1,d2;
    s=(int *)malloc(n*sizeof(int));
    t=(int *)malloc(n*sizeof(int));
    M=(n*(n*n+1))/2;
    printf ("\n\nМагическая константа=%d",M);
        for (i = 0; i < n; i++)
   s[i]= 0;
 
for (i=0; i<n; i++) // для каждой строки
for (j=0; j<n; j++) // суммируем эл-ты
 s[i] += x[i][j];
 
printf ("\n");
 
for (i = 0;i<n;i++)
{
    printf("\nСумма элементов %d-строки=%d ",i+1, s[i]);
}
 
//сумма столбцов
for(j=0;j<n;j++)
t[j]=0;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
t[j]+=x[i][j];
printf("\n");
for(j=0;j<n;j++)
{
printf ("\nСумма элементов %d-столбца=%d ",j+1, t[j]);
}
//сумма главной диагонали
 
d1=0;
for(i=0;i<n;i++)
{
    d1+=x[i][i];
}
printf("\n");
 
printf ("\nСумма элементов на главной диагонали=%d ",d1);
//сумма побочной диагонали
d2=0;
for(i=0;i<n;i++)
{
d2+=x[i][n-i-1];
}
printf ("\nСумма элементов на побочной диагонали=%d ",d2);
 
 
//////сравнение сумм и вывод
int k=0,b=0;
for(i=0;i<n;i++)
{
    if(s[i]==M)
    {k=i;
    k++;
    }
}
for(j=0;j<n;j++)
{
    if(t[j]==M)
    {
        b=j;
        b++;
    }
}
if(k==n&&b==n&&d1==M&&d2==M) printf("\n\nКвадрат является магическим\n");
else printf("\n\nКвадрат  не является магическим\n");
free(s);
free(t);
for (i=0; i<n; i++)
    free(x[i]);
    free(x);
 
getch ();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2009, 13:14
Ответы с готовыми решениями:

Разбить программу на функции
Помогите пожалуйста разбить программу на функции. Надо чтобы были функции ввода, вывода и работы с матрицей: #include &lt;iostream&gt; ...

Разбить программу на функции с параметрами
помогите с заданием нужно разбить программу на функции с параметрами #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int...

Как разбить программу на функции (использование глобальных переменных не допускается)?
int main() { char c; int str=0, stb=0; int **a = NULL, **b = NULL; bool a1 = false, a2 = false; do {

6
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
31.05.2009, 13:26
Покажи, как разбил на функци. А с "ругается" мы поможем.
0
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 21
31.05.2009, 17:22  [ТС]
Проблема с функцией resh()
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "locale.h" 
void vvod (int, int **);
void vivod(int, int **, int *, int *, int, int, int);
void resh(int, int **);
int main () 
{
    setlocale(LC_ALL,"Russian");
    int M;
    int **x, i, j, n, *s, *t, d1, d2;
    printf ("Введите размерность квадрата чисел ");
    scanf("%d",&n);
    x = (int **)malloc(sizeof(int)*n);
    for (i=0; i<n; i++)
    x[i] = (int *)malloc(sizeof(int*)*n);
    printf("\nВведите элементы квадрата\n");
    vvod(n, x);
resh(n, x);
vivod(n,x,s,t, M, d1, d2);
free(s);
free(t);
for (i=0; i<n; i++)
    free(x[i]);
    free(x);
getch ();
}
 
void vvod (int n, int **x)  
{
    int i,j;
    for (i=0; i<n; i++)
            for (j=0; j<n; j++)
            {
                printf("x[%d][%d]= ",i,j);
                scanf("%d",&(x[i][j]));
            }   
            //////////////эхо контроль введённых данных
        printf("\n");
        printf("Введенный квадрат \n");
 
        for(i=0;i<n;i++)
        {
        for (j=0;j<n;j++)           
            printf("\t%d ",(x[i][j]));
        printf("\n");
        }
}
 
void vivod(int n, int **x)
{
    //////сравнение сумм
    int *s, *t;
    int M, d1, d2;
int k=0,b=0,i,j;
for(i=0;i<n;i++)
{
    if(s[i]==M)
    {k=i;
    k++;
    }
}
for(j=0;j<n;j++)
{
    if(t[j]==M)
    {
        b=j;
        b++;
    }
}
if(k==n&&b==n&&d1==M&&d2==M) printf("\n\nКвадрат является магическим\n");
else printf("\n\nКвадрат  не является магическим\n");
}
void resh(int n, int **x)
{
    /////поиск 
int i,j;
    //int d1,d2, M;
    s=(int *)malloc(n*sizeof(int));
    t=(int *)malloc(n*sizeof(int));
    M=(n*(n*n+1))/2;
    printf ("\n\nМагическая константа=%d",M);
        for (i = 0; i < n; i++)
   s[i]= 0;
 
for (i=0; i<n; i++) // для каждой строки
for (j=0; j<n; j++) // суммируем эл-ты
 s[i] += x[i][j];
 
printf ("\n");
 
for (i = 0;i<n;i++)
{
    printf("\nСумма элементов %d-строки=%d ",i+1, s[i]);
}
 
//сумма столбцов
for(j=0;j<n;j++)
t[j]=0;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
t[j]+=x[i][j];
printf("\n");
for(j=0;j<n;j++)
{
printf ("\nСумма элементов %d-столбца=%d ",j+1, t[j]);
}
//сумма главной диагонали
 
d1=0;
for(i=0;i<n;i++)
{
    d1+=x[i][i];
}
printf("\n");
 
printf ("\nСумма элементов на главной диагонали=%d ",d1);
//сумма побочной диагонали
d2=0;
for(i=0;i<n;i++)
{
d2+=x[i][n-i-1];
}
printf ("\nСумма элементов на побочной диагонали=%d ",d2);
}
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.06.2009, 05:04
Code
1
2
3
    x = (int **) malloc(sizeof(int)*n);
    
    x[i] = (int *) malloc(sizeof(int*)*n);
а ты это не перепутал ?
программа вообще работает правильно ?
0
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 21
01.06.2009, 10:37  [ТС]
Да, всё нормально
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.06.2009, 11:28
ну, это совпало, что размер int'а равен размеру int *

Code
1
2
3
    x = (int **) malloc(n*sizeof(int *));
    
    x[i] = (int *) malloc(n*sizeof(int));
ещё неясно задание
0
9 / 9 / 7
Регистрация: 22.05.2009
Сообщений: 54
01.06.2009, 13:15
В функции rech не объявлены переменные d1, d2, s, t, M;
Сравни функцию vivod () в строке №6 с ней же в строке №51.

Добавлено через 9 минут 8 секунд
В функции resh(): d1, d2, s, t, M - должны быть выходными параметрами. Самое простое решение - через глобальные переменные.

Добавлено через 10 минут 17 секунд
Держи код.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "locale.h" 
void vvod (int, int **);
void vivod(int, int **, int *, int *, int, int, int);
void resh(int, int **);
 
int *s = 0, *t = 0, d1 = 0, d2 = 0, M = 0;
 
int main () 
{
    setlocale(LC_ALL,"Russian");
    int **x, i, j, n;
    printf ("Введите размерность квадрата чисел ");
    scanf("%d", &n);
    x = (int **)malloc(sizeof(int)*n);
    for (i=0; i<n; i++)
        x[i] = (int *)malloc(sizeof(int*)*n);
    printf("\nВведите элементы квадрата\n");
    vvod(n, x);
    resh(n,x);
    vivod(n,x,s,t, M, d1, d2);
    free(s);
    free(t);
    for (i=0; i<n; i++)
        free(x[i]);
    free(x);
    getch ();
    return 0;
}
 
void vvod (int n, int **x)      
{
    int i,j;
    for (i=0; i<n; i++)
         for (j=0; j<n; j++)
         {
                 printf("x[%d][%d]= ",i,j);
                 scanf("%d",&(x[i][j]));
         }       
         //////////////эхо контроль введённых данных
    printf("\n");
    printf("Введенный квадрат \n");
 
    for(i=0;i<n;i++){
        for (j=0;j<n;j++)                       
            printf("\t%d ",(x[i][j]));
        printf("\n");
    }
}
 
void vivod(int n, int **x, int *s, int *t, int M, int d1, int d2)
{
        //////сравнение сумм
    int k=0,b=0,i,j;
    for(i=0;i<n;i++){
        if(s[i]==M){
            k=i;
            k++;
        }
    }
    for(j=0;j<n;j++){
        if(t[j]==M){
                b=j;
                b++;
        }
    }
    if(k==n&&b==n&&d1==M&&d2==M) printf("\n\nКвадрат является магическим\n");
    else printf("\n\nКвадрат  не является магическим\n");
}
 
void resh(int n, int **x)
{
        /////поиск 
    int i,j;
    s=(int *)malloc(n*sizeof(int));
    t=(int *)malloc(n*sizeof(int));
    M=(n*(n*n+1))/2;
    printf ("\n\nМагическая константа=%d",M);
    for (i = 0; i < n; i++)
        s[i]= 0;
    for (i=0; i<n; i++) // для каждой строки
        for (j=0; j<n; j++) // суммируем эл-ты
            s[i] += x[i][j];
 
    printf ("\n");
 
    for (i = 0;i<n;i++){
        printf("\nСумма элементов %d-строки=%d ",i+1, s[i]);
    }
 
//сумма столбцов
    for(j=0;j<n;j++)
        t[j]=0;
    for(j=0;j<n;j++)
        for(i=0;i<n;i++)
            t[j]+=x[i][j];
    printf("\n");
    for(j=0;j<n;j++){
        printf ("\nСумма элементов %d-столбца=%d ",j+1, t[j]);
    }
//сумма главной диагонали
 
    d1=0;
    for(i=0;i<n;i++){
        d1+=x[i][i];
    }
    printf("\n");
 
    printf ("\nСумма элементов на главной диагонали=%d ",d1);
    //сумма побочной диагонали
    d2=0;
    for(i=0;i<n;i++){
        d2+=x[i][n-i-1];
    }
    printf ("\nСумма элементов на побочной диагонали=%d ",d2);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2009, 13:15
Помогаю со студенческими работами здесь

Разбить программу на функции
Есть программа, но весь код записан в main. Нужно код разбить на 3 функции. Тоесть первая функция должна рандомно создать матрицу и...

Разбить программу на функции
объясните, пожалуйста, как эту программу разбить на три функции: ввод, обработка, вывод. глобальные переменные использовать нельзя. в таком...

Разбить программу на функции
Как эту задачу разбить на функции? #include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstdio&gt; #include&lt;ctime&gt; ...

Разбить программу на 2 функции с++
----------------------------------------------------------------- Здравствуйте. Имеется программа написанная на с++ Помогите...

Разбить программу на функции
Помогите пожалуйста. Нужно разбить программу на функции. #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru