0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 15
1

Найти минимальный элемент среди элементов, расположенных в нечетных строках массива

08.07.2013, 14:46. Показов 2748. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цель лабораторной работы: получить навыки по обработке двумерных массивов с помощью языка Си.
Дан массив A[5,5]. Найти минимальный элемент среди элементов, расположенных в нечетных строках массива.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2013, 14:46
Ответы с готовыми решениями:

Найти минимальный элемент среди элементов, расположенных в нечетных строках массива
Решите задачу с помощью двумерных массивов. Дан массив A. Найти минимальный элемент среди...

Найти минимальный элемент массива среди положительных элементов, расположенных левее первого нуля
Дан целочисленный вектор A(n). Найти минимальный элемент среди положительных элементов,...

Найти минимальный элемент среди элементов расположенных в нечетных строках массива
Дан массив А 5.5 найти минимальный элемент среди элементов расположенных в нечетных строках массива

Найти минимальный элемент среди элементов, расположенных в нечетных строках массива
Дан массивВ(5,5).найти минимальный элемент среди элементов, расположенных в нечетных строках...

6
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
16.07.2013, 19:17 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
28
29
30
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
const int SIZE = 5;
int main()
{int nMas[SIZE][SIZE];
 srand(time(NULL));
 for(int i = 0; i < SIZE; i++)  //заполнения массива случайными числами
     { for(int j = 0; j < SIZE; j++)
           nMas[i][j] = rand()%100 +1;
     }
 int min = nMas[0][0];
 for(int i = 0; i < SIZE; i++)
     { if(((i+1)%2) != 0 )
          {for(int j = 0; j < SIZE; j++ )
               {if(nMas[i][j] < min)
                   min = nMas[i][j];
               }
          }
     }
 printf("Massiv A[%d][%d]\n",SIZE,SIZE);
 for (int i = 0; i < SIZE; i++)
      {for(int j = 0;j < SIZE; j++)
           {printf("%5d ",nMas[i][j]);}
       printf("\n");    
      }
printf("min = %d",min) ;     
getch();   
return 0;}
0
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
16.07.2013, 20:41 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
77
78
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 5
 
int FindMinValueMatrix(int **matrix, int array_matrix);
int** GenerateMatrix(int size_matrix);
void ViewMatrix(int **matrix, int array_matrix);
 
int main()
{
    
    int **pMatrix = GenerateMatrix(SIZE);
    if (pMatrix == NULL){
        printf("Error generate matrix\n");
    } else {
        printf("Matrix success generate\n");
        ViewMatrix(pMatrix, SIZE);
        printf("\n\n");
        printf("Минимальное значение в нечетных строках равно: %2d\n", FindMinValueMatrix(pMatrix, SIZE));
    }                   
    return 0;
}
 
int** GenerateMatrix(int size_array){
    
    static int **matrix = {NULL};
    int **result = NULL;
    
    if (NULL==(matrix = (int**) calloc(size_array, sizeof(int*)))){
        printf("error calloc memory for %3d memory block\n", size_array*size_array);
    } else {
        srand(time(NULL));
        int i = 0, j = 0;
        for(i = 0; i < size_array; i++){
            if (NULL==(matrix[i] = calloc(size_array, sizeof(int)))){
                printf("error calloc memory block\n");
            }       
            for(j =0;j < size_array; j++){
                matrix[i][j] = rand()%99;           
            }
        }
        result = matrix;
    }
    return result;
}
            
int FindMinValueMatrix(int **matrix, int array_matrix){
    int i,j;
    int min = 0, flag = 1;
    for(i = 0; i < array_matrix; i++){                  
        if (i%2) {          
            for(j = 0;j < array_matrix; j++){
                if (flag) {
                    min = matrix[i][j];
                    flag = 0;
                } else {
                    min = matrix[i][j] < min ? matrix[i][j]:min;                            
                }               
            }
            printf("Min in line #%2d  min: %2d\n", i, min);             
        }
    }   
    return min;
}
void ViewMatrix(int **matrix, int array_matrix) {
    int i,j;
    
    for(i = 0; i < array_matrix; i++){                  
        printf("Line #%2d: ", i);
        for(j = 0;j < array_matrix; j++){
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
Matrix success generate
Line # 0:   78   37   36   73   70 
Line # 1:   26   68    0   70   72 
Line # 2:    4   33   34   11   33 
Line # 3:   42    1   39    6   36 
Line # 4:   70   17    3   59   20 
 
 
Min in line # 1  min:  0
Min in line # 3  min:  0
Минимальное значение в нечетных строках равно:  0
 
[spouk@/mnt/big1gb/hddDevelop/source/c/2013$]
0
0 / 0 / 4
Регистрация: 07.09.2012
Сообщений: 6
16.07.2013, 21:43 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdlib.h>
#include <stdio.h>
 
 
int main(void){
    enum { SIZE = 5 };
    
    const int mas[SIZE][SIZE] = { { 1, 2, 3, 4,5},
                                  { 9, 9, 5, 4,2},
                                  {-1,-7,-4, 9,5},
                                  { 0, 0,-7, 0,1},
                                  { 7, 7,-4,-7,1} };
    
    
    int min = mas[0][0];
    
    for (int i = 0; i < SIZE; i += 2){
        for (int j = 0; j < SIZE; ++j){
            if (mas[i][j] < min)  min = mas[i][j];
        }
    }
    
    printf("min: %d\n", min);
    
    return EXIT_SUCCESS;
}
0
Заблокирован
17.07.2013, 22:57 5
fanatdebian, выделенная память не освобождается. Много лишних вызовов calloc. Лучше выделить память так:
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
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE (5)
 
int main ()
{
    int ** point = NULL;
    int * matrix = NULL;
    int i = 0, j;
 
    point = malloc(SIZE * sizeof(int*));
    matrix = malloc(SIZE * SIZE * sizeof(int));
 
    for (; i < SIZE; i++)
        point [i] = matrix + (i * SIZE);
 
    for (i = 0; i < SIZE; i++)
    {
        for (j = 0; j < SIZE; j++)
        {
            point [i][j] = i + j;
            printf("%4i", point [i][j]);
        }
        putchar('\n');
    }
    
    return 0;
}
*alloc не принципиально, т.е. я не хочу подчеркнуть что лучше дергать malloc чем calloc, просто написал так.
0
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
17.07.2013, 23:08 6
Цитата Сообщение от duhast_vladisla Посмотреть сообщение
fanatdebian, выделенная память не освобождается. Много лишних вызовов calloc. Лучше выделить память так:
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
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE (5)
 
int main ()
{
    int ** point = NULL;
    int * matrix = NULL;
    int i = 0, j;
 
    point = malloc(SIZE * sizeof(int*));
    matrix = malloc(SIZE * SIZE * sizeof(int));
 
    for (; i < SIZE; i++)
        point [i] = matrix + (i * SIZE);
 
    for (i = 0; i < SIZE; i++)
    {
        for (j = 0; j < SIZE; j++)
        {
            point [i][j] = i + j;
            printf("%4i", point [i][j]);
        }
        putchar('\n');
    }
    
    return 0;
}
*alloc не принципиально, т.е. я не хочу подчеркнуть что лучше дергать malloc чем calloc, просто написал так.
Косметические подправки несущественны, оба варианта равнозначны при прочих равных. Посмотри на асм код, который генерится при моем варианте выделения памяти и твоего. Почувствуй как грица "разницу". А разницы никакой по существу.
А использования calloc умышленно. Ибо оставлять сегменты памяти заполненные трешем как-то не очень во всех случаях.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12226 / 7358 / 1730
Регистрация: 25.07.2009
Сообщений: 13,471
18.07.2013, 14:37 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не, с памятью всё-таки поаккуратнее надо. Мало того, что выделенная память не возвращается (если программа один раз "отстрелялась" и, что бы там внутри неё ни произошло, завершилась с кодом 0 - система как-нибудь сама память вернёт), вот так вообще нельзя делать:
Цитата Сообщение от fanatdebian Посмотреть сообщение
C
1
2
3
4
5
6
7
8
        for(i = 0; i < size_array; i++){
            if (NULL==(matrix[i] = calloc(size_array, sizeof(int)))){
                printf("error calloc memory block\n");
            }       
            for(j =0;j < size_array; j++){
                matrix[i][j] = rand()%99;           
            }
        }
Если память не выделилась, пользователя мы, конечно, предупредим, но нас самих этим не остановишь. Настойчиво продолжаем писать "куда-то" случайные числа от 0 до 98...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 14:37
Помогаю со студенческими работами здесь

Дан массив A[5,5]. Найти минимальный элемент среди элементов, расположенных в нечетных строках массива
Дан массив A. Найти минимальный элемент среди элементов, расположенных в нечетных строках...

Найти минимальный элемент среди элементов, расположенных в нечетных строках матрицы
Дан массив A. Найти минимальный элемент среди элементов, расположен-ных в нечетных строках...

Найти минимальный элемент среди элементов, расположенных на нечетных позициях массива
Срочно! 2. Дан массив А(15). Найти минимальный элемент среди элементов, расположенных на...

Найти минимальный элемент среди элементов, расположенных на нечетных позициях массива
Пожалуйста, кто нибудь помогите.... решить задачу: Дан массив А(15). Найти минимальный элемент...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru