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

Декларирование функции

19.10.2013, 20:12. Показов 5460. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста! Как правильно декларировать дополнительные функции? Если с главной программе массив описан как:
C
1
2
3
4
5
 int main()
{
int matrica[k][l];
 
....
правильно ли его декларировать в дополнительной функции так?:
C
1
void funkcija1(int Mas[][]);
у меня выдает ошибку
declaration of `Mas' as multidimensional array must have bounds for all dimensions except the first

как это можно исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2013, 20:12
Ответы с готовыми решениями:

Декларирование функции API
У функции есть параметр типа WCHAR. Подскажите, пожалуйста, что это за тип и как в этот параметр...

Декларирование классов
Условие: Вычислить сумму первых n натуральных чисел, кратных 3. Задание: Создать класс в...

Декларирование классов
помогите пожалуйста................. :((((( Найти сумму n членов ряда Фибоначчи.

Декларирование класса
Здравствуйте. Подскажите, как сделать так, чтобы класс декларировался только если не был...

12
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
19.10.2013, 20:19 2
C
1
void funkcija1(int **Mas);
размеры массива передать отдельно, через глобальную переменную, или задать через #define для всей программы.
1
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
19.10.2013, 20:30  [ТС] 3
C
1
void funkcija1(int **Mas);
если я правильно поняла - это через указатель?
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
19.10.2013, 20:34 4
да, именно. Все равно доступ к элементам точно такой же - Mas[x][y]. Или в main стандартом оговаривается, что можно писать char **argv, можно char *argv[], и вообще все, что угодно, но идентичное по сути.
1
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
19.10.2013, 20:37  [ТС] 5
у меня в задание указанно - что должно быть 2 дополнительные функции - одна работает с индексами, а другая с указателя, как правильно сделать через индексы?
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
19.10.2013, 21:11 6
дак это не вопрос передачи аргумента! Только что в соседней теме сравнивали: Вывести имя и все аргументы main, которые передаются

C
1
2
3
4
5
6
//доступ по индексу
result = array[i][j];
//доступ по указателю
int *pointer = array[i];
pointer += j;
result = *pointer;
1
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
19.10.2013, 21:26  [ТС] 7
спасибо
0
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
20.10.2013, 15:52  [ТС] 8
я вот пытаюсь сделать через индексы -
C
1
2
3
4
5
6
int i,j,k,l;// задала глобальные переменные
 
int funkcija1(int array[][], int i,int j); // пытаюсь декларировать доп. функцию выдает ошибку declaration of `array' as                        multidimensional array must have bounds for all dimensions except the first 
 
int main()
{ ......
где я ошиблась?

если пишу
C
1
int funkcija1(int array[k][l], int i,int j);
- тоже выдает ошибку
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
20.10.2013, 16:14 9
в [][].
C
1
2
int funkcija1(int **array, int i, int j); //вариант 1
int funkcija1(int *array[], int i, int j); // вариант 2 - он идентичен
Добавлено через 4 минуты
вообще возможность установить размер передаваемого массива в аргументе функции есть (за исключением первого "измерения"), но все равно никто так не делает.
0
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
20.10.2013, 16:19  [ТС] 10
у меня должно быть я доп функции, одна - обрабатывает только через индексы, а вторая только через указатели - то что вы написали - если я не ошибаюсь для указателей
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
20.10.2013, 16:28 11
Цитата Сообщение от Ailisa Посмотреть сообщение
у меня в задание указанно - что должно быть 2 дополнительные функции - одна работает с индексами, а другая с указателя, как правильно сделать через индексы?
Цитата Сообщение от XZentus Посмотреть сообщение
дак это не вопрос передачи аргумента!
Цитата Сообщение от Ailisa Посмотреть сообщение
у меня должно быть я доп функции, одна - обрабатывает только через индексы, а вторая только через указатели - то что вы написали - если я не ошибаюсь для указателей
отвечал на этот вопрос уже и даже с примером - посмотрите еще раз!
У вас все равно не получится объявить аргумент без указателя (как int array[][]). А вот внутри функции уже работайте с ним только через указатели или по индексам.

Могу, конечно, предложить варианты, которые вам могут понравится, но за них вас преподы явно по голове не погладят - это глобальный массив или (**void).
1
1 / 1 / 0
Регистрация: 23.03.2013
Сообщений: 45
21.10.2013, 11:18  [ТС] 12
Спасибо

Добавлено через 18 часов 48 минут
если я все правильно поняла - то должно быть так:
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
#define a 5
#define b 10
#define c 6
#define d 8
 
 
void max_rad(int*, int, int);
void max_ind(int matrica[a][b], int, int);
 
 
int k,l,i,j,max,count;
 
 
int main()
{   printf(" Привет\n");
    int k,l,val;
    int izvele;
    char quit[2];
    do
    {
        do
        {
            printf("\n Выберите массив? Размеры 5x10 или 6x8?\n");
            printf("\n Выберите 1 - если 5x10 и 2 - еси 6x8, 3 - продолжить\n");
            scanf("%d",&izvele);
            switch(izvele)
            {
                case 1:
                    k=5;
                    l=10; 
                    break;
                case 2:
                    k=6;
                    l=8;
                    break;        
                default:
                    printf("По умолчанию 5 * 10\n");
                    k=5;
                    l=10;
                    break;
            }
           
            gets(quit);
        } while (!strcmp(quit, "y"));
        
         int matrica[k][l];
         matrica[a][b]=matrica[k][l];
         
        
        printf("\n Спасибо\n");
        srand(time(NULL)); 
        system("cls");
        do
        {
            printf("\n MENU:\n");
            printf("\n 1 - Заполнить массив через random\n");
            printf("\n 2 - Заполнить массив с клавиатуры\n ");
            printf("\n 3 - Вывести на экран\n ");
            printf("\n 4 - Удалить строку массива, которая содержит максимальный элемент, использую указатели\n ");
            printf("\n 5 - Удалить строку массива, которая содержит максимальный элемент, использую индексы\n ");
            printf("\n 6 - Выйти\n");
            scanf("%d",&izvele);
            if(izvele == 1)
            {//заполнить масив через функцию Random
                //system("cls");         
                for(i=0;i<k;i++)
                    for(j=0;j<l;j++)
                        matrica[i][j] = 1 + rand()%9;
              
                printf("\n");
                printf("\n Массив заполнен\n");
            }
            else if(izvele==2) // заполнить массив с клавиатуры
            {
                printf ("Введите массив :");        
                for(i=0;i<k;i++)
                   for(j=0;j<l;j++)                   
                   {  
                      printf("\n Введите [%i][%i] значение: ",i+1,j+1);
                      scanf ("%i",&val);                   
                      matrica[i][j]=val;
                   }    
            }
            else if(izvele == 3)//вывести массив на экран   
            {                    
                        for(i=0;i<k;i++)
                        {
                            for(j=0;j<l;j++)
                                printf("%d ",matrica[i][j]);
                            printf("\n");
                        }                    
            }
            else if(izvele==4) // удалить, используя указатели
            { 
            max_rad(*matrica,i,j);                                   
            printf("\n"); 
            }
             else if(izvele==5)  // удалить, используя индексы
            {              
            max_ind(matrica[a][b]);     // не могу правильно описать  - выдает ошибку                   
            printf("\n"); 
            }
           
          
            else if(izvele > 6)
            printf("Команда не распознана. Повторите действие\n");
        } while(izvele != 6);
      
        getchar();
        gets(quit);
    } while (!strcmp(quit, "y"));
 
return 0;
}
 
void max_ind(int matrica[a][b],int i,int j)
{
    
printf("\n Индексы\n");      
max=matrica[0][0];    
for(i=0;i<a;i++)
for(j=0;j<b;j++)
if(matrica[i][j]>max)
max=matrica[a][b];
printf(" Max элемент ir %i,\n",max); 
printf("\n"); 
printf("\n Новый массив\n");
printf("\n"); 
for(i=0;i<a;i++)
{
count=0;              
for(j=0;j<b;j++)
{                           
  if(matrica[i][j]==max) 
  {
   count=count+1;
 }
}  
if(count==0)
{
for(j=0;j<b;j++)                               
 {                                                                                    
  printf("%4d",matrica[i][j]);
  }
  printf("\n");     
}
}
}           
 
void max_rad(int *matrica, int k,int l)
{    
    printf("\nУказаткли\n"); 
    printf("\n");
    max=*matrica;           
    for(i=0;i<k;i++)
    for(j=0;j<l;j++)
    if(*(matrica+i*l+j)>max)
    max=*(matrica+i*l+j);
    printf(" Max элемент ir %i,\n",max);   
    printf("\n"); 
    printf("\n Новый массив\n");
    printf("\n"); 
    for(i=0;i<k;i++)
            {
            count=0;              
            for(j=0;j<l;j++)
            {                           
            if(*(matrica+i*l+j)==max) 
              {
                count=count+1;
              }
            }  
            if(count==0)
            {
            for(j=0;j<l;j++)                               
            {                                                                                    
              printf("%4d",*(matrica+i*l+j));
            }
            printf("\n");     
            }
            }
}
max_ind(matrica[a][b]); // не могу правильно описать - выдает ошибку - где я снова ошиблась, подскажите пожалуйста
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
21.10.2013, 14:50 13
C
1
2
int matrica[k][l];
matrica[a][b]=matrica[k][l];
Утверждать, конечно, не могу, но что-то мне подсказывает, что ваша задумка и реально написанная команда могут отличаться... Может, я просто не понимаю ход ваших мыслей.
C
1
max_rad(*matrica,i,j);
зачем разыменование? Вы в самом начале неправильно (не в соответствии в логикой работы с 2-мерным массивом) объявили первый аргумент этой функции - он должен выглядеть как int**. И matrica туда должна передаваться без разыменования. (кстати, какое значение при вызове этой функции должны иметь i и j?)
C
1
max_ind(matrica[a][b]); // не могу правильно описать - выдает ошибку - где я снова ошиблась, подскажите пожалуйста
объявляете 3 аргумента, а передаете всего один. Вызов этой функции не должен отличаться от вызова max_rad вообще никак.
0
21.10.2013, 14:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2013, 14:50
Помогаю со студенческими работами здесь

Декларирование переменной
Здарвствуйте! Скажи пожалуйста, можно ли как-то избавится от повторяющизся участков кода для записи...

Обязательное декларирование приватных функций
Доброго времени суток! Как-то можно отучить кьют требовать обязательное объявление всех приватных...

Декларирование атрибутов динамических объектов
Здравствуйте. Пишу шахматную программу. Решил использовать динамические объекты. Проблема...

Декларирование процедур обработки события эл. управления?
Создал программным путем эл. управления CommandButton, т.е. во время загрузки формы. Как теперь...


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

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