Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 20:01   #1
vbn1
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 67
По умолчанию Не могу изменить

программа должна проверять первый столбец матрицы если элемент положительный заменять его нулём
у меня только получилось изменять последний столбец.Вот код
Код:
//---------------------------------------------------------------------------

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

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        int N, M;
        int i,j;
        int **mas;
        int f = 0;
        int s = -1;

        // Вводим размер массива
        printf("N=");
        scanf("%d", &N);
        printf("M=");
        scanf("%d", &M);

        // Создаем динамический массив NxM
        mas = (int **)calloc(N,sizeof(int *));
        for(i = 0; i < N; i++) mas[i]=(int *)calloc(M,sizeof(int));

        // Вводим элементы массива
        for(i = 0; i < N; i++)
                for(j = 0; j < M; j++)
                {
                        printf("mas[%d][%d]=", i,j);
                        scanf("%d",&mas[i][j]);
                }

        // Поиск столбца с положительными элементами
        for(j = 0; j < M; j++)
        {
                // Переменная хранит есть ли в столбце отрицательные элементы
                // 0 - столбец состоит из положительных элементов
                // 1 - в столбце есть отрицательные элементы
                f = 0;
                for(i = 0; i < N; i++)
                {
                        // Если элемент массива отрицательный
                        if (mas[i][j] < 0) f = 1;
                }
                // Если столбец состоит из положительных элементов,
                // то запоминаем индекс столбца
                if (f == 0) s = j;
        }

        // Выводим исходный массив
        for(i = 0; i < N; i++)
        {
                for(j = 0; j < M; j++)
                {
                        printf("%3d   ", mas[i][j]);
                }
                printf("\r\n");
        }

        printf("\r\n");

        // Если есть столбец с положительными элементами
        if (s != -1)
        {
                // Сдвигаем все последующие столбцы на 1 влево
                for (j = s; j < M - 1; j++)
                        for (i = 0; i < N; i++)
                        {
                                mas[i][j] = mas[i][j+1];
                        }
                // Уменьшаем размер массива на 1 столбец
                M--;
        }


        // Выводим результирующий массив
        for(i = 0; i < N; i++)
        {
                for(j = 0; j < M; j++)
                {
                        printf("%3d   ", mas[i][j]);
                }
                printf("\r\n");
        }

        getch();
        return 0;

}
//---------------------------------------------------------------------------
vbn1 вне форума Ответить с цитированием
Старый 15.12.2012, 20:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у меня только получилось изменять последний столбец
Где это в коде написано?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2012, 20:51   #3
vbn1
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 67
По умолчанию

Код:
 if (s != -1)
        {
                // Сдвигаем все последующие столбцы на 1 влево
                for (j = s; j < M - 1; j++)
                        for (i = 0; i < N; i++)
                        {
                                mas[i][j] = mas[i][j+1];
                        }
                // Уменьшаем размер массива на 1 столбец
                M--;
vbn1 вне форума Ответить с цитированием
Старый 16.12.2012, 00:51   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

по коду я понимаю вы удалять хотите? зачем двигать?

суть моего удивления....

допустим 2 столбец положителен... положительный. по заданию вам ни надо ничего двигать но бог с ним.

рисуем

1 2 3 - номера столбиков
-5 3 -9
-2 5 -2
-1 7 -8

Код:
if (s != -1)
        {
                // Сдвигаем все последующие столбцы на 1 влево
                for (j = s; j < M - 1; j++)
                        for (i = 0; i < N; i++)
                        {
                                mas[i][j] = mas[i][j+1];
                        }
                // Уменьшаем размер массива на 1 столбец
                M--;
попадвем в тело если..

цикл от 1 до 2 // мы попадём только один раз.
начало
цикл от 0 до 3 // три раза
начало
....
массив01 = массив02
массив11 = массив12
массив21 = массив22
....
конец
конец
/-------------

и то это право и ваще верх ногами, я даже запутался......
mas[i][j] = mas[i][j+1];

цикл от 2 до 2 // мы не попадаем...
начало
цикл от 0 до 3 // три раза
начало

цикл от 0 до 2 // 2 раза
начало
цикл от 0 до 3 // три раза
начало
....
массив00 = массив01
массив10 = массив11
массив20 = массив21
массив01 = массив02
массив11 = массив12
массив21 = массив22
....
конец
конец

мммм..... ну так правильно.... вроде....

совет вот вы в 1 вот этом форе сделали так, сначало j потом i... ну чисто правильно конечно.... но это вводит заблуждение... ведь во всех форах норм.... я думаю как раз где то в этом и есть причина потому что на вывод удут по другому а двигаете иначе.. попотом на консоль ещё раз иначе и в результате у вас другая картина.....
/----

попробуйтее вывести это как матрицу.... и вы увидите, что вы её задом наперёд переворачиваете, потом вновь поварачиваете... но в целом.. одного столбика не должно быть...
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Stilet; 16.12.2012 в 12:46.
Perchik71 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Липкое окно. Не могу изменить ширину прилипшего окна. artemavd Общие вопросы Delphi 2 23.07.2012 01:04
Не могу изменить файл index.php Стасонище PHP 6 18.05.2012 13:25
Не могу изменить репутацию двум пользователям.. Вавел из ГМТУ О форуме и сайтах клуба 10 19.10.2009 14:06
Не могу изменить данные в DB aleksey_prm Помощь студентам 1 17.03.2008 08:21
Не могу изменить DBF файл Wanderer БД в Delphi 3 31.05.2007 20:23