Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Антон123
0 / 0 / 0
Регистрация: 04.11.2012
Сообщений: 20
#1

Массив: Распечатать номера тех строк, в которых встречается минимальный элемент - C (СИ)

17.07.2013, 23:39. Просмотров 566. Ответов 2
Метки нет (Все метки)

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

Мой код:

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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
void main()
 {
    setlocale(LC_ALL, "Russian");
    int  i, j;
    float N, M, **pMatrica, Mmin=1000;
    printf("Введите количество элементов матрицы:");
    printf("\n\nстрок: ");
    scanf("%f", &N);
    printf("\nстолбцов: ");
    scanf("%f", &M);
    pMatrica =(float**)malloc(N*sizeof(float*));// выделение памяти под массив указателей на указатели начала строк
    for(i=0; i<N; i++)
    {
        pMatrica[i]=(float*)malloc(M*sizeof(float));
          for(j=0; j<M; j++)
            {
               pMatrica[i][j]=0.001*rand();
            }
 
    }
 
    printf("\nВведенная матрица:\n\n");
    for(i=0; i<N; i++)
    {
        printf("\n");
        for(j=0; j<M; j++)
        {
            printf("%6.2f", pMatrica[i][j]);
        }
    }
 
    for (i=0; i<N; i++)
      for (j=0; j<M; j++)
        if(pMatrica[i][j]<Mmin)
          {
              Mmin = pMatrica[i][j];
              
          }
 
    printf("\n\nМинимум матрицы: %6.2f", Mmin);
    free(pMatrica[i]);
    free(pMatrica);
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 23:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Распечатать номера тех строк, в которых встречается минимальный элемент (C (СИ)):

Определить номера тех строк, оба элемента которых имеют нулевые значения - C (СИ)
Задана матрица A с 2 столбцами и 45 строками.Определить номера тех строк,оба элемента которых имеют нулевые зн

Определить номера тех строк, оба элемента которых имеют нулевые значения - C (СИ)
Задана матрица А с 2 столбцами и 45 строками. Определить номера тех строк, оба элемента которых имеют нулевые значения.

Распечатать очередь из тех чисел, после которых не стоит заданное число - C (СИ)
Помогите пожалуйста, работы на 2 минуты. Есть очередь из целых чисел, нужно распечатать очередь из тех, после которых не стоит заданное...

Определить номера тех строк целочисленной матрицы A размера N x M, которые совпадают с массивом D[M] - C (СИ)
Есть задание: определить номера тех строк целочисленной матрицы A размера N x M, которые совпадают с массивом D. Если таких строк нет,...

Дан двумерный массив N x M. Выяснить, есть ли в нём одинаковые числа, распечатать их значения и номера - C (СИ)
Собственно задали такую задачку. С вводом двумерного массива вроде разобрался, а вот с запоминанием повторяющихся чисел - провал. ...

Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf - C (СИ)
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;ctype.h&gt; #define N 80 #define M 6 int main (void) ...

2
EndWar
19 / 19 / 3
Регистрация: 17.05.2013
Сообщений: 72
18.07.2013, 00:14 #2
C
1
2
3
4
5
6
7
8
9
for (i=0;i<N;i++)
   for (j=0;j<M;j++)
      if (pMatrica[i][j]==Mmin)
       {
        printf ("Минимальный в строке %d\n",i);
         ++k;// количество строк, в которых есть минимальный
        break; 
       }
printf ("Количество строк с минимальным элементом=%d\n",k);
вроде так. не компилил, но должно работать, если остальной код правильный. и в начале где нибудь допиши объявление k и присвой ему нолик

Добавлено через 16 минут
забыл внутри цикла break добавить, если условие сработает.. иначе при наличии нескольких минимальных значений в одной строке будут лишние подсчеты и печати. добавил
1
duhast_vladisla
Заблокирован
18.07.2013, 00:26 #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
79
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
void dump (int * array, int row, int column);
void set_rows (int * array, int row, int column, int * rows, int min_value);
int find_min (int * array, int row, int column, int * counter);
 
#define SIZE (5)
 
int main ()
{
    int matrix [SIZE][SIZE];
    int rows [SIZE];
    int counter = 0;
    int min;
 
    srand(time(NULL));
    memset(rows, 0, SIZE * sizeof(int));
 
    for (int i = 0; i < SIZE; i++)
        for(int j = 0; j < SIZE; j++)
            matrix [i][j] = rand() % SIZE;
 
    printf("a matrix:\n");
    dump ((int*)matrix, SIZE, SIZE);
    set_rows((int*)matrix, SIZE, SIZE, rows, \
        (min = find_min ((int*)matrix, SIZE, SIZE, &counter)));
    printf("\n\nmin item are: %i\n", min);
    printf("found are %i minimums in rows:\n", counter);
 
    for (int i = 0; i < SIZE; i++)
        if (rows [i])
            printf("%3i", i);
    printf("\ngood luck!\n");
    
    return 0;
}
 
void dump (int * point, int N, int M) {
    int * p = point;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++)
            printf("%4i", *p++);
        putchar('\n');
    }
    putchar('\n');
}
 
int find_min (int * point, int N, int M, int * counter) {
    int * p = point, retval = *p, i = 0, siz = N * M;
 
    while (i < siz) {
        if (retval == *p)
            (*counter)++;
        else if (retval > *p) {
            *counter = 1;
            retval = *p;
        }
        p++; i++;
    }
    return retval;
}
 
void set_rows (int * point, int N, int M, int * rows, int value) {
    int * p;
    for (int i = 0; i < N; i++) {
        p = point + (i * M);
        
        for (int j = 0; j < M; ++j) {
            if (*p == value) {
                rows [i] = 1;
                break;
            }
            p++;
        }
    }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[muslim@localhost samples]$ gcc -std=c99 shit.c -g
[muslim@localhost samples]$ ./a.out 
a matrix:
   3   1   4   1   2
   3   1   1   1   0
   2   0   2   0   2
   2   3   0   3   3
   2   0   3   1   0
 
 
 
min item are: 0
found are 6 minimums in rows:
  1  2  3  4
good luck!
[muslim@localhost samples]$
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 00:26
Привет! Вот еще темы с ответами:

Организовать одномерный массив, каждый элемент которого есть минимальный элемент в соответствующей строке матрицы - C (СИ)
Добрый день. Я учусь программировать в Turbo C(Не с++, а именно эта версия). Не могу найти необходимой литературы или пример программ. Кто...

Вывести номера строк матрицы, все элементы которых равны 2 - C (СИ)
Здравствуйте. Дан двумерный массив (N=9, M=10). Вывести на экран монитора номера строк, все элементы которых равны 2. ...

Найти номера строк в матрице, все элементы которых больше 10 - C (СИ)
Дана матрица A(n,n).Найти номера строк, все элементы которых больше 10?Подскажите пожалуйста цикл? Добавлено через 2 часа 9 минут ...

Определить номера строк матрицы в которых все элементы равны - C (СИ)
всем доброго времени суток. помогите пожалуйста с одной задачей. дана матрица размером M на N.определить номера строк в которых все...


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

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

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