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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрица N*K 
:(
    Опции темы
bncom
  Дата 12.2.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



Помогите с задачей:

В двумерном массиве из целых чисел обнулить элементы над главной диагональю, если их сумма меньше суммы элементов под главной диагональю. В противном случае обнулить элементы под главной диагональю.

Код приведите желательно на Си.
Компилятор: TurboC 3
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
MAKCim
Дата 12.2.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

int check(int** matrix, int n) //Проверка
{
    int s=0,c=0, i,j;
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++) s+=matrix[i][j], c+=matrix[j][i]
    }
    return s<c ? 1: 0;
}

void set_zero(int** matrix, int n)  //Обнуление
{
    int i,j,checking=check(matrix,n);
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++)
        {
            if (checking) matrix[i][j]=0;
            else matrix[j][i]=0;
        } 
    }
}

код для кв. матрицы размерности n


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bncom
Дата 12.2.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



Спасибо, но не могли бы вы подробнее написать, с самого начала, начиная с #include smile . Плиз...
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
MAKCim
Дата 12.2.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

#include <stdio.h>
#include <malloc.h>

//код из предыдущего поста

int main()
{
    int n,i,j,**matrix;
    printf("n=");
    scanf("%d",&n);
    matrix=(int**) malloc(n*sizeof(int*));
    for (i=0; i<n; i++)
    {
        matrix[i]=(int*) malloc(n*sizeof(int));
        for (j=0; j<n; j++)
        {
            printf("matrix[%d][%d]=",i,j);
            scanf("%d",&matrix[i][j]);
        }
    }
    set_zero(matrix,n);
    printf("New matrix:\n");
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++) printf("matrix[%d][%d]=%d\n",i,j,matrix[i][j]);
        free(matrix[i]);
    }
    free(matrix);
    scanf("%d",&i);
    return 0;
}

вообще тебе стоит почитать книжку по C, а не ждать готовой программы здесь
если бы не хорошее настроение smile я бы ее писать не стал

Это сообщение отредактировал(а) MAKCim - 12.2.2006, 13:43


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bncom
Дата 12.2.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



Я вам очень признателен! надеюсь, у вас и впредь будет хорошее настроение smile
Добавлено @ 15:29
Ой, не компилируется. Вот, я собрал представленный код:
Код

#include <stdio.h>
#include <malloc.h>

//код из предыдущего поста
int check(int** matrix, int n) //Проверка
{
    int s=0,c=0, i,j;
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++) s+=matrix[i][j], c+=matrix[j][i]
    }
    return s<c ? 1: 0;
}

void set_zero(int** matrix, int n)  //Обнуление
{
    int i,j,checking=check(matrix,n);
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++)
        {
            if (checking) matrix[i][j]=0;
            else matrix[j][i]=0;
        } 
    }
}


int main()
{
    int n,i,j,**matrix;
    printf("n=");
    scanf("%d",&n);
    matrix=(int**) malloc(n*sizeof(int*));
    for (i=0; i<n; i++)
    {
        matrix[i]=(int*) malloc(n*sizeof(int));
        for (j=0; j<n; j++)
        {
            printf("matrix[%d][%d]=",i,j);
            scanf("%d",&matrix[i][j]);
        }
    }
    set_zero(matrix,n);
    printf("New matrix:\n");
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++) printf("matrix[%d][%d]=%d\n",i,j,matrix[i][j]);
        free(matrix[i]);
    }
    free(matrix);
    scanf("%d",&i);
    return 0;
}


Выдаются ошибки:

11 Statement missing ;
15 Declaration is not allowed here
16 Declaration syntax error
59 Declaration missing ;
59 Compound statement missing }
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
volvo877
Дата 12.2.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



bncom,
Код
    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++) s+=matrix[i][j], c+=matrix[j][i]; // <--- Точку с запятой добавь
    }

PM MAIL   Вверх
bncom
Дата 15.2.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



У меня опять проблема6 программа не обнуляет нужные элементы. Помогите разобраться, где что не так....
Код

//Условие задачи:
//В двумерном массиве NxK массиве целых чисел обнулить элементы над главной диагональю,
//если их сумма меньше суммы элементов под главной диагональю. В противном случае
//обнулить элементы под главной диагональю.

#include <stdio.h> //описание функций ввода-вывода
#include <conio.h>  
#include <stdlib.h> //описание функций malloc
#define NOL 0 // константа со значением нуль

void main()
{
    int **matrix;
    int m; //число строк матрицы
    int n; //число столбцов матрицы
    int i=0; // промежуточная переменная
    int j=0; // промежуточная переменная
    int SymmaAboveDiag=0; //сумма элементов над главной диагональю
    int SymmaUnderDiag=0; // сумма элементов под главной диагональю
    
    clrscr(); //очищаем экран

    printf("Пожалуйста, введите размерность массива через пробел dim="); //вводим двумерный массив целых чисел
    scanf("%d%d",&m, &n);
    //Захватываем память под элементы матрицы    
    matrix=(int**) malloc(m*n*sizeof(int*));
    printf("Введите элементы матрицы:\n"); 
    for (i=0;i<n;i++)
    {
        matrix[i]=(int*) malloc(m*n*sizeof(int));
        for (j=0;j<n;j++)
        {
            // Вводим элементы с индексами i, j
            scanf("%d",&matrix[i][j]);
        }
    }
    //конец ввода двумерного массива целых чисел

    //считаем сумму элементов по обе строны от главной диагонали
    for (i=0;i<n;i++) //перебираем все строки
        for (j=0;j<n;j++) //перебираем все столбцы
        {
            if (j>i) SymmaAboveDiag+=matrix[i][j];
            if (j<i) SymmaUnderDiag+=matrix[i][j];
        }
    //конец суммирования

    //выполняем обнуление элементов массива
    if (SymmaAboveDiag<SymmaUnderDiag) //если сумма чисел над диагональю меньше суммы чисел под диагональю, то
        for (i=0;i<n;i++)
            for (j=0;j<n;j++)
                if (j>i)
                    matrix[i][j]=NOL; //элементу массива присваиваем нуль
    else
        for (i=0;i<n;i++)
            for (j=0;j<n;j++)
                if (j>i)
                    matrix[i][j]=NOL;
     //конец обнуления элементов массива

    printf("Сумма элементов над главной диагональю : %d\n",SymmaAboveDiag);
    printf("Сумма элементов под главной диагональю : %d\n",SymmaUnderDiag);
    
    printf("В итоге получаем матрицу:\n"); //выводим отредактированный двумерный массив
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            printf("%i ",matrix[i][j]);
        }
        printf("\n");
    }
    // конец вывода отсортированного двумерного массива

    getch();
}

PM MAIL   Вверх
cardinal
Дата 15.2.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



bncom, ты хоть что-то сам пытался сделать?



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bncom
Дата 16.2.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



cardinal, так это я сам написал! smile
Ты бы лучше помог бы, а не рассуждал smile

Это сообщение отредактировал(а) bncom - 16.2.2006, 19:59
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
volvo877
Дата 16.2.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Код
    // Захватываем память под элементы матрицы    
    matrix=(int**) malloc(m*n*sizeof(int*)); // <--- Неверно !!!
    printf("Введите элементы матрицы:\n"); 
    for (i=0;i<n;i++)
    {
        matrix[i]=(int*) malloc(m*n*sizeof(int)); // <--- Тоже неверно !!! 
        for (j=0;j<n;j++)
        {
            // Вводим элементы с индексами i, j
            scanf("%d",&matrix[i][j]);
        }
    }

Этот фрагмент должен быть таким:
Код
    // Захватываем память под элементы матрицы    
    matrix=(int**) malloc(n*sizeof(int*)); // <--- Память под n указателей на строки матрицы !
    printf("Введите элементы матрицы:\n"); 
    for (i=0;i<n;i++)
    {
        matrix[i]=(int*) malloc(m*sizeof(int)); // <--- В каждей строке - m элементов !
        for (j=0;j<m;j++)
        {
            // Вводим элементы с индексами i, j
            scanf("%d",&matrix[i][j]);
        }
    }

Ну, и далее по тексту:

Код

    // выполняем обнуление элементов массива
    if (SymmaAboveDiag<SymmaUnderDiag) 
        for (i=0;i<n;i++)
            for (j=0;j<n;j++) { // <-- Не забывай скобки !!!
                if (j>i)
                    matrix[i][j]=NOL;
            }
    else
        for (i=0;i<n;i++)
            for (j=0;j<n;j++) { // <--- Здесь тоже
                if (j<i)
                    matrix[i][j]=NOL;
            }

У тебя была ошибка - компилятор считал, что else относится к if(j > i) ...

Это сообщение отредактировал(а) volvo877 - 17.2.2006, 00:14
PM MAIL   Вверх
Jilian
Дата 16.2.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

bncom, ты хоть что-то сам пытался сделать?

Понимаешь, очень часто складывается ситуация, что людям, абсолютно ничего не понимающим в программировании надо написать прогу. Тогда они либо ищут помощи на форумах, либо платят за код. Но платить-то не охота... Так что не нервничай.
PM MAIL   Вверх
cardinal
Дата 16.2.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Jilian @ 16.2.2006, 21:30 Найти цитируемый пост)
Так что не нервничай.

Да я и не нервничаю, просто не люблю тунеядцев. smile

(если в этом случае, bncom, я ошибаюсь, то я беру свои слова обратно и публично извиняюсь.)


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bncom
Дата 17.2.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

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



Всех благодарю за помощь!
Спасибо большое (подсказали, указали на ошибки), вот так и надо учиться программировать! smile
cardinal , замяли... smile
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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