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

Динамический массив, функции, структура

23.02.2012, 16:27. Показов 1034. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
//исходник.
//двумерный массив заданной размерности(у меня 3 на 4) заполняется с клавиатуры,
//в котором производится поиск мин. и макс. значений и вывод данных значений
//с их координатами в данном массиве. 
//где r-ряд для мин. элемента, с-колонка для мин. эл-та.
//rm-ряд для макс. эл-та, cm-колонка для мин. эл-та. 
//на ее основе нужно написать программу, где должен присутсвовать такой же массив,
//но динамический(размерность для простоты такая же) + написать функцию, 
//которая будет находить мин. и макс. и их координаты
//(чтобы каждый раз не писать это для нового массива)
//но так как функция принимает лишь одно значение, 
//то нужна еще структура с найденными значениями.
 
 #include <stdio.h>
 #include <math.h>
 #include <conio.h>
 
 #define n 3
 #define m 4
 
 main() {
 double x[n][m],min,max,**xd;
 int i,k,c,r,rm,cm;
 
 /* вот это был простой статич массив  
    while(1) {
    printf("input mas [%d][%d] \n",n,m);
    for(i=0;i<n;i++)
        for(k=0;k<m;k++)
        if(scanf("%lg", &x[i][k])==EOF) return 0;
 */
 
 //сделал динамический массив
 while(1) {// mas memory increasing
    printf("input mas [%d][%d] \n",n,m);
    xd=calloc(n,sizeof(double *));
    if(xd==NULL) {puts("not enought memory!");return 0;}
    for(i=0;i<n;i++)
        if((xd[i]=calloc(m,sizeof(double)))==NULL)
        {for(k=0;k<i;k++) free(xd[k]);free(xd);return 0;}
        else { //if mem is increased, fill the mas
               //если память выделилась, то массив заполняется.
            for(k=0; k<m;k++)
            if (scanf("%lg", &xd[i][k])==EOF) {
            //if EOF, refresh the mem
                for(i=0;i<n;i++)
                    free(xd[i]);
                    free(xd);
                    return 0;
                    } else x[i][k]=xd[i][k];
                    }
 
 /*mas output*/
    for(i=0;i<n;i++) {
        for(k=0;k<m;k++)
        printf("%10lg",x[i][k]);
        printf("\n");
                     }
 
 /*min/max search*/
    min=x[0][0];
        max=min;    
    r=0;
    c=0;
    for(i=0;i<n;i++) {
        for(k=0;k<m;k++)
        if(min>x[i][k]) {min=x[i][k];r=i+1;c=k+1;}
        else if(max<x[i][k]) {max=x[i][k];rm=i+1;cm=k+1;}
                     }
    printf("\n min %lf (%d;%d) \n",min,r,c);
    printf("\n max %lf (%d;%d) \n",max,rm,cm);
             }
 
    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
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <malloc.h>
 
const int n = 3;   //размерность массива кол-во строк
const int m = 4;   //кол-во столбцов
 
//структура с принимаемыми значениями
/*
r - ряд минимального эл-та
c - колонка минимального эл-та
rm - ряд максимального эл-та
cm - колонка максимального эл-та
min & max эл-ты, соответственно. 
*/
struct str {int r,rm,c,cm;
           double min,max;
           } st;
 
 
//************функции***************** 
//функция для статического массива
/*мне сказали, что тут неправильно  в параметрах функции указан 
статический массив, так как он заполняется не так, как динамич. и
как я понял не нужно писать размерность массива?*/
double fs (double *x,int n,int m,struct str *st) {
    //min/max search static mas
    double min,max,x[n][m];
    int i,k,c,r,rm,cm;
    min=x[0][0];
    max=min;
    r=0;rm=0;
    c=0;cm=0;
    for(i=0;i<n;i++) {
                 for(k=0;k<m;k++)
                 if(min>x[i][k]) {st.min=x[i][k];st.r=i+1;st.c=k+1;}
                 else if(max<x[i][k]) {st.max=x[i][k];st.rm=i+1;st.cm=k+1;}
                 }
}
//функция для динамического массива
double fd (double **xd,int n,int m,struct str *st) {
    //min/max search dynamic mas
    double min,max,x[n][m];
    int i,k,c,r,rm,cm;
    min=x[0][0];
    max=min;
    r=0;rm=0;
    c=0;cm=0;
    for(i=0;i<n;i++) {
                 for(k=0;k<m;k++)
                 if(min>x[i][k]) {st.min=x[i][k];st.r=i+1;st.c=k+1;}
                 else if(max<x[i][k]) {st.max=x[i][k];st.rm=i+1;st.cm=k+1;}
                 }
}
//************************************
main() {double x[n][m],min,max,**xd;
       int i,k,c,r,rm,cm;
//выделение памяти под динамический массив
while(1) {// mas memory increasing
    printf("input mas [%d][%d] \n",n,m);
    xd=calloc(n,sizeof(double *));
    if(xd==NULL) {puts("not enought memory!");return 0;}
    for(i=0;i<n;i++)
        if((xd[i]=calloc(m,sizeof(double)))==NULL)
        {for(k=0;k<i;k++) free(xd[k]);free(xd);return 0;}
        else { //if mem is increased, fill the mas
               //если память выделилась, то массив заполняется.
            for(k=0; k<m;k++)
            if (scanf("%lg", &xd[i][k])==EOF) {
            //if EOF, refresh the mem
                for(i=0;i<n;i++)
                    free(xd[i]);
                    free(xd);
                    return 0;
                    } else x[i][k]=xd[i][k];
                    }
 
/*вывод исходного массива на экран*/
for(i=0;i<n;i++) {
                 for(k=0;k<m;k++)
                 printf("%10lg",x[i][k]);
                 printf("\n");
                 }                 
/*вызов функции*/
//для статич. мас.      
fs(x,n,m,&st);
printf("\n min %lf (%d;%d) \n",st.min,st.r,st.c);  //вывод мин. и его координаты.
printf("\n max %lf (%d;%d) \n",st.max,st.rm,st.cm);        //вывод макс. и его координаты.
printf("\n");
//для динамич. мас.
    fd(xd,n,m,&st);
    printf("\n min %lf (%d;%d) \n",st.min,st.r,st.c);      //вывод мин. и его координаты.
    printf("\n max %lf (%d;%d) \n",st.max,st.rm,st.cm);    //вывод макс. и его координаты.
 
}
 
return 0;
 
}
Буду очень благодарен за помощь! Спасибо!
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2012, 16:27
Ответы с готовыми решениями:

Динамический массив внутри функции
Создается динамический массив buff внутри функции.Обязательно ли освобождать память от него (строка 21) в конце функции?Ведь указатель на...

Сделать динамический массив структур, причем в структуре так же существует динамический массив
Добрый день. Есть такая пзадача: нужно сделать динамический массив структур, причем в структуре так же существует динамический массив....

Вернуть динамический массив строк из функции
Здравствуйте. int main(void) { char** pStrings = (char**) malloc(25600000); SearchTxt(); //... return 0; } Функция...

3
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
23.02.2012, 16:53
Очень много ошибок. Вот смотрите
Цитата Сообщение от kulta Посмотреть сообщение
double fs (double *x,int n,int m,struct str *st) {
* * * * //min/max search static mas
* * * * double min,max,x[n][m];
etc.
Код написан очень плохо. Боюсь, но заставить работать правильно никто не сможет.
Что именно не понятно?
0
kulta
23.02.2012, 17:36
Насчет кода извиняюсь, я начинающий в этом деле, аж самому страшно. Как правильно написать функцию, чтобы найденные параметры она пересылала в структуру? Параметры нужно писать через указатели?
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
23.02.2012, 19:40
Цитата Сообщение от kulta Посмотреть сообщение
чтобы найденные параметры она пересылала в структуру?
Не понятно. Вы передаете в функцию параметры какого-либо типа.

Цитата Сообщение от kulta Посмотреть сообщение
Параметры нужно писать через указатели?
Только если вы хотите иметь возможность изменять их значение в самой функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2012, 19:40
Помогаю со студенческими работами здесь

Как инициализировать динамический массив в отдельной функции?
Здравствуйте, хочу инициализировать три динамических массива отдельной функцией. int main(int argc, char* argv){ ushort *big1=0,...

Динамический массив и функции управления памятью Win32 API
Первая функция получает размерность массива, создает динамический массив и возвращает указатель на начало созданного массива. Вторая –...

Создать динамический массив из вещественных чисел и написать функции, выполняющие операции с этими числами
Создать динамический массив, наполнить его вещественными числами и создать функции, выполняющие сортировку элементов массива (от...

Реализовать тип данных «Динамический массив целых чисел» — IntVector и основные функции для работы с ним
Реализовать тип данных «Динамический массив целых чисел» — IntVector и основные функции для работы с ним. Разработать тестовое приложение...

Структура и динамический массив
Передо мной стоит задача - создать программу, которая чем-то похожа на макет гаражного кооператива. Короче, пользователь задает число...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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