Форум программистов, компьютерный форум CyberForum.ru

Удаление всех строк содержащих минимальный элемент матрицы. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу, которая подводит итоги конкурса "5 лучших товаров года". http://www.cyberforum.ru/cpp-beginners/thread18973.html
Здравствуйте, помогите пожалуйста решить задачу. Написать программу, которая подводит итоги конкурса "5 лучших товаров года". Оценка товара производится по пятибалльной системе. Программа должна получать от пользователя число людей, давших товару определенный бал, вычислить общее количество проголосовавших за данный товар людей и число набранных баллов, и после этого упорядочить список (методом...
C++ переведите пожалуйста с языка паскаль на си++! вот код: program cyb_38; uses Crt; var n, i, unik, srst: byte; sum: longint; sr_ar: real; mas: array of integer; begin http://www.cyberforum.ru/cpp-beginners/thread18961.html
Определить длину самой большой последовательности подряд идущих согласных C++
В строке записаны несколько предложений . Каждое предложение заканчивается точкой, вопросительным или восклицательным знаками. 1. Вывести на экран только те предложения в которых нет ни 1 цифры 2. Определить длину самой большой последовательности подряд идущих согласных Это 2 разные программы. В понедельник надо сдавать задачи а что делать я не знаю помогите пожалуйста... Извиняюсь если...
C++ найти корень уравнения методом хорд и касательных на С
найти корень уравнения (x*x + ln(x)-2) методом хорд и касательных на С. Если не можете, тогда подскажите плз... В этом методе есть f, f1, f2.. f-само уравнение, а что задавать для f1,f2 ? Заранее спасибо
C++ Рисование треугольника http://www.cyberforum.ru/cpp-beginners/thread18882.html
Здравствуйте, нужно сделать вот это через подпрограмму: ----*---- ---*-*--- --*---*-- -*-----*- ********* '-' это пробелы
C++ Каким образом нормально считать с консоли строку? Дело в том что необходимо считывать строки вводимые с консоли. Но полноценно это не выходит. Ф-ция scanf() обеспечивает считывание только до первого пробела, сколько читал мануалов по ее использованию, выхода из ситуации не нашел. getchar() - вообще не то что надо... Прошу вашей помощи. Нужно просто считать введенную строку и сохранить в переменную. подробнее

Показать сообщение отдельно
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.12.2008, 03:45     Удаление всех строк содержащих минимальный элемент матрицы.
предположительно сортировка пустых строк не требуется, т.к. время уйдёт одинаковое

Код
 
#include <stdio.h>
#include <stdlib.h>

#define M  3    /* количество строк    */
#define N  4    /* количество столбцов */

/* создаёт матрицу M x N, заполняет её и удаляет строки с наименьшим элементом */
main()
{
    int **mtxcreat(int, int);
    int mtxfill(int **, int, int);
    long mtxmin(int **, int, int);
    void mtxrdel(int **, int, int, long),
         mtxprint(int **, int, int),
         mtxfree(int **, int);
    int **m;
    int nrows = M, ncells = N, i, j;
    
    if ((m = mtxcreat(nrows, ncells)) == NULL)
        return 1;
    if (mtxfill(m, nrows, ncells) > 0) {
        mtxfree(m, nrows);
        return 2;
    }    
    putchar('\n');    
    mtxprint(m, nrows, ncells);
    putchar('\n');    
    mtxrdel(m, nrows, ncells, mtxmin(m, nrows, ncells));
    mtxprint(m, nrows, ncells);
    putchar('\n');    
    mtxfree(m, nrows);
    return 0;
}

/* mtxcreat:  создаёт матрицу размерности m x n */
int **mtxcreat(int m, int n)
{
    int **mtx, i;
    
    if ((mtx = calloc(m, sizeof(int *))) == NULL)
        return NULL;
    for (i = 0; i < m; i++)
        if ((mtx[i] = calloc(n, sizeof(int))) == NULL) {
            while (--i >= 0)
                free(mtx[i]);
            free(mtx);
            return NULL;
        }
    return mtx;    
}

/* mtxfill:  запрашивает числа для матрицы и записывает их */
int mtxfill(int **mtx, int m, int n)
{
    int i, j;
    
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++) {
            printf("M %d %d : ", i, j);
            if (scanf("%d", &mtx[i][j]) != 1)
                return 1;
        }
    return 0;
}

/* mtxmin:  находит минимальный элемент матрицы */
long mtxmin(int **mtx, int m, int n)
{
    int i, j;
    long min = mtx[0][0];
    
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            if (mtx[i][j] < min)
                min = mtx[i][j];
    return min;
}

/* mtxrdel:  удаляет строку матрицы в которой элемент */
void mtxrdel(int **mtx, int m, int n, long elem)
{
    int i, j;
    
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            if (mtx[i][j] == elem) {
                free(mtx[i]);
                mtx[i] = NULL;
                break;
            }    
}

/* mtxprint:  выводит матрицу на экран */
void mtxprint(int **mtx, int m, int n)
{
    int i, j;
    
    for (i = 0; i < m; i++)
        if (mtx[i] != NULL)
            for (j = 0; j < n; j++)
                printf(" %3d%s", mtx[i][j], j == n-1 ? "\n" : "");
}

/* mtxfree:  удаляет матрицу, освобождая память */
void mtxfree(int **mtx, int m)
{
    int i;
    
    for (i = 0; i < m; i++)
        free(mtx[i]);
    free(mtx);
}
kitten, всегда когда объявляешь переменные выноси их вверх (верх имеется в виду верх блока в котором они создаются блок - область в фигурных скобках, заголовок цикла ещё не блок, два раза в одном блоке объявлять переменную нельзя, внутренний блок считается подблоком отдельным, но и уничтожаться они будут после его завершения),
большими буквами объявляются определения препроцессора, маленькими переменные, одни и те же имена для функций и переменных или имена различающиеся только регистром тоже не есть гуд

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