Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]Двумерный массив, указатели, и функции, Лаба =(  
V
    Опции темы
WaterProof
  Дата 30.11.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


OverLapped



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.10.2006
Где: Москва

Репутация: нет
Всего: нет



Здравствуйте. Задача такова: Дан двумерный массив размерности n*m. отсортировать эту матрицу по убыванию сумм элементов строк, осле чего вывести получившийся массив на экран.
+Условия: три функции - vvod(), ras(), vivod(), то есть ввод, расчет и вывод соответственно.
Возникло несколько вопросов по указателям, массивам и функциям. 1) как передавать в качестве параметра двумерный массив на ввод\и вывод+как перебирать этот самый двумерный массив в функциях через адрес? 2) Как можно отсортировать по убыванию сумм элементов строк?(долго думал, но алгоритм на так и вкурил как делать...)
Код

#include <stdio.h>
#include <conio.h>

void vvod(int *,int *, int *);

void vivod(int *,int, int);

void main()
{
int n,m, a[10][10];
clrscr();
vvod(&a[0][0], &n,&m);
vivod(&a[0][0],n,m);
}

void vvod(int *a,int *n, int *m)
{
int i,j;
printf("Vvedite kol-vo N M: \n");
scanf("%d %d",n, m);

printf("Massiv: \n");
for(i=1; i<*n; i++)
 for(j=1; j<*m; j++)
   scanf("%d",a); //<====== вот здесь
}

void vivod(int *a,int k, int z)
{
int i,j;
 for(i=1; i<k; i++)
  for(j=1; j<z; j++);
   printf("%d ",*(a+i*z+j));//<========и здесь
}

PM MAIL ICQ   Вверх
Dov
Дата 1.12.2007, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Код

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>

// ф-ция ввода элементов матрицы и подсчёта их построчной суммы    
void Input(int** matr, int row, int col)
{
    int i, j, sum;

    for(i = 0; i < row; i++)
    {
        sum = 0;
        for(j = 1; j <= col; j++)
        {
            // здесь можно организовать ввод элементов матрицы вручную, например так
            //    printf("Enter matr[%d][%d] = ", i, j - 1);
            //    scanf("%d", &matr[i][j]);

            // заполняем матрицу случайными числами    1...99
            matr[i][j] = rand() % 99 + 1;

            // подсчитываем сумму элементов...    
            sum += matr[i][j];
        }

        // ...и записываем её в самый первый элемент i-той строки 
        matr[i][0] = sum;
    }


// ф-ция вывода
void Output(int** matr, int row, int col)
{
    int i, j;

    for(i = 0; i < row; i++)
    {
        for(j = 1; j <= col; j++)
            printf("%3d", matr[i][j]);

        printf("\t\tsum:%5d\n", matr[i][0]);
    }
    puts("");
}

// ф-ция сравнения первых элементов строк матрицы, в которых будет храниться сумма этих строк 
int Compare(const void* a, const void* b)
{
    // qsort будет сортировать по убыванию суммы элементов
    return *(*(int**)b) - *(*(int**)a);
}

int main()
{
    int **matrix, rows, cols, i;

    // 'запускаем' гегератор случайных чисел
    srand((unsigned)time(NULL)); 

    // просим пользователя ввести размеры матрицы
    printf("Enter rows: ");
    scanf("%d", &rows);
    printf("Enter cols: ");
    scanf("%d", &cols);

    // выделяем память для динамической матрицы
    matrix = (int **)malloc(sizeof(int *) * rows);
    for(i = 0; i < rows; i++)
        matrix[i] = (int *)malloc(sizeof(int) * (cols + 1));

    // ввод элементов матрицы
    Input (matrix, rows, cols);

    // вывод исходной матрицы
    puts("\nSource: ");
    Output(matrix, rows, cols);

    // сортируем матрицу по первому элементу каждой строки, в котором хранится сумма её элементов 
    qsort(matrix, rows, sizeof(int *), Compare);

    // вывод результата
    puts("\nResult: ");
    Output(matrix, rows, cols);
    
    // освобождаем память
    for(i = 0; i < rows; i++)
        free(matrix[i]);
    free(matrix);

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.