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

Упорядочить строки целочисленной - C++

Восстановить пароль Регистрация
 
QuanterSVETA
 Аватар для QuanterSVETA
0 / 0 / 0
Регистрация: 06.11.2013
Сообщений: 5
07.11.2013, 08:07     Упорядочить строки целочисленной #1
Приветствую всех, мне нужно помощь в решении этой задачи, сам не могу поймать баг.. в целом все работает, но на деле выводит не до конца отредактированный массив. Заранее благодарен!

Упорядочить строки целочисленной прямоугольной матрицы по возрастанию суммы
//модулей их элементов. Найти номер первого из столбцов, содержащих хотя бы один
//отрицательный элемент.

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include "conio.h"
#include "windows.h"
#include "string.h"
#include <iostream>

int main()
{

setlocale (LC_ALL,"Russian");
setlocale (LC_ALL, "rus");

int **mas = NULL;
int *sum = NULL;
int r, b, key;
int temp;
int i = 0, a = 0, j = 0, k = 1;

do
{
printf ("\n-----------------------------------------\n");
printf ("\n ---> 1 - Ввод массива и обработка \n ---> 0 - Выход \n");
key = getch();

switch (key)
{

case'1': //В этом блоке мы вводим массив и выполняем обраотку

int *sums = new int[b];

//////Вводим количество столбцов
do
{
printf ("\n-----------------------------------------\n");
printf ("\n Введите количество строк массива: ");
scanf ("%d", &r);

if (r <= 0)
{
printf ("\n -- Некорректное значение --\n");
}
}while (r <= 0);


//////Вводим количество столбцов
do
{
printf ("\n-----------------------------------------\n");
printf ("\n Введите количество столбцов массива: ");
scanf ("%d",&b);

if (b <= 0)
{
printf ("\n -- Некорректное значение --\n");
}
}while (b <= 0);

printf ("\n-----------------------------------------\n");

mas = new int*[r];

for (int i = 0; i < r; i++)
{
mas[i] = new int[b];
}

for (i = 0; i < r; i++)
{
for (j = 0; j < b; j++)
{
printf ("\n Введите A [%d][%d] = ", i, j); //Ввод массива
scanf ("%d", &mas[i][j]);
}
}

printf ("\n\n-----------------------------------------\n");
printf ("\n Первоначальный массив:\n\n");

for (int i = 0; i < r; ++i) //Вывод перваначального массива
{
for (int j = 0; j < b; ++j)
{
printf("%-5d", mas[i][j]);
}
printf("\n\n");
}

///////////

for(i = 0; i < r; ++i)
{
int sum = 0;
for(j = 0; j < b; ++j)
{
sum = sum + abs(mas[i][j]);
sums[i] = sum;
}
bool flag = false;

do
{
flag = false;
for(i = 0; i < r; i++)
{
if(sums[i] < sums[i-1])
{
int buf = sums[i-1];
sums[i] = sums[i-1];
sums[i-1] = buf;
int *tmp = mas[i];
mas[i] = mas[i-1];
mas[i-1] = tmp;
flag = true;
}
}
}while(flag = false);
}

printf ("\n\n-----------------------------------------\n");
printf ("\n Отредактированный массив:\n\n");

for (int i = 0; i < r; ++i) //Вывод отредактированного массива
{
for (int j = 0; j < b; ++j)
{
printf("%-5d", mas[i][j]);
}
printf("\n\n");
}

for(i = 0; i < r; ++i) //Вывод номера первого столбца с отрицательным элементом
{
for(j = 0; j < b; ++j)
{
if(mas[i][j] < 0)
{
while (a != 1)
{
printf ("\n-----------------------------------------\n");
printf("\n Номер первого столбца с отрицательным элементом: %d\n", j+1);
a = 1;
}
}
}
}

break;
}

}while (key !='0');
for (int i = 0; i < r; i++)
{
delete [] mas[i];
}
delete []mas;
delete []sum;

return 0;
}

Добавлено через 17 часов 51 минуту
Закройте тему, не актуально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2013, 08:07     Упорядочить строки целочисленной
Посмотрите здесь:

C++ Упорядочить строки целочисленной прямоугольной матрицы
В прямоугольной целочисленной матрицы упорядочить элементы размещенных на главной диагонали по убыванию C++
C++ В прямоугольной целочисленной матрице упорядочить элементы строчек по убыванию
C++ Упорядочить строки целочисленной матрицы по возрастанию одинаковых элементов в строке
C++ Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каж
C++ Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества одинаковых элементов в каж
C++ Упорядочить элементы в целочисленной матрице
C++ Упорядочить столбцы целочисленной прямоугольной матрицы по возрастанию произведения элементов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
07.11.2013, 10:22     Упорядочить строки целочисленной #2
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <memory.h>
 
#define N 10
 
void swap(int& n1, int& n2);
void swapptr(int*& ptr1, int*& ptr2);
 
int main(int argc, char* argv[])
{
    int** A = new int*[N];
    memset((void*)A, 0x00, 4 * N);
 
    for (int t1 = 0; t1 < N; t1++)
    {
        A[t1] = new int[N];
        for (int t2 = 0; t2 < N; t2++)
        {
            A[t1][t2] = rand() % 9 + 1;
            printf("%d ",A[t1][t2]);
        }
 
        printf("\n");
    }
 
    printf("\n");
 
    int* B = new int[N];
    memset((void*)B, 0x00, sizeof(int) * N);
 
    for (int i = 0; i < N; i++)
    {
        int j = 0, sum = 0;
        while (j < N) sum+=abs(A[i][j++]);
        if (sum > 0) B[i] = sum;
    }
 
    for (int k = 0; k < N; k++)
    {
        int min = k;
        for (int r = k+1; r < N; r++)
            min = (B[r] < B[min]) ? r : min;
 
        swap(B[k],B[min]);
        swapptr(A[k],A[min]);
    }
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",A[z1][z2]);
 
        printf("sum = %d\n",B[z1]);
    }
 
    printf("\n");
 
    _getch();
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }
 
void swapptr(int*& ptr1, int*& ptr2)
 { int* _tpn = ptr1; ptr1 = ptr2; ptr2 = _tpn; }
http://codepad.org/GHJ1kaBG
Миниатюры
Упорядочить строки целочисленной  
Yandex
Объявления
07.11.2013, 10:22     Упорядочить строки целочисленной
Ответ Создать тему
Опции темы

Текущее время: 03:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru