Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Frost_Burn
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 15
#1

Найти минимальный элемент среди элементов, расположенных в нечетных строках массива - C (СИ)

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

Цель лабораторной работы: получить навыки по обработке двумерных массивов с помощью языка Си.
Дан массив A[5,5]. Найти минимальный элемент среди элементов, расположенных в нечетных строках массива.
http://www.cyberforum.ru/c-beginners/thread919833.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2013, 14:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти минимальный элемент среди элементов, расположенных в нечетных строках массива (C (СИ)):

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

Найти минимальный элемент среди положительных элементов, расположенных левее первого элемента, равного нулю
Пишет что нет нулевого, даже когда ввожу 0, и посмотрите другие ошибки. СРОЧНО...

Найти минимальный элемент среди положительных элементов массива А
Помогите с программой, кому не сложно. Буду весьма благодарен. Условие ниже. ...

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

Массив: Найти минимальный элемент среди элементов, кратных 3
1. Задано целое и массив элементов а) Определить индекс элемента,...

6
Neoni
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
Завершенные тесты: 1
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
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 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
ERAGORN
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
duhast_vladisla
Заблокирован
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
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 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
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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
18.07.2013, 14:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 14:37
Привет! Вот еще темы с решениями:

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

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

Найти номер и значение второго положительного элемента массива среди элементов, расположенных за минимумом
Задание 2 Найти номер и значение второго положительного элемента массива...

Найти минимальный элемент из максимальных в строках матрицы
дана матрица m*n найти минимальный элемент из максимальных в строках


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

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

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