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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
#1

Сортировка двумерного массива по столбцам - C++

01.08.2009, 19:02. Просмотров 2649. Ответов 11
Метки нет (Все метки)

Всем привет! Начала изучать С++ совсем недавно, и вот столкнулась с трудностями(( задачка-то вроде несложная... но вот три дня бьюсь, не могу найти где тут косяк, прямо отчаялась уже...

собстно условие: назовем характеристикой столбца сумму его нечетных отрицательных элементов. переставить столбцы в соответствии с характеристиками.

вот что у меня вышло:
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
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
#include <math.h>
int const a=4, b=6;
int i, j, har[b], m [a][b], s=0;
int main () {
   randomize ();
 
   for (i=0; i<a; i++) {     // заполнение массива случайными числами
    for (j=0; j<b; j++) {
      m[i][j]=random (10)-5;
      cout<< m[i][j] << "  ";
      }
    cout << "\n";
   }
 
   for (i=0; i<b; i++)             // подсчет характеристик и вывод их на экран
    for (j=0; j<a; j++)
      if (m[j][i]<0 && m[j][i]%2!=0) har[i]+=abs (m[j][i]);
   for (i=0;i<b;i++) cout << har[i] << " ";
   cout<< "\n";
 
   for (i=0; i<b-1; i++)     // перестановка столбцов
    for (j=i+1; j<b; j++)
     if (har [i] >= har [j]) {
    for (int k=0; k<a; k++) {
      s=m[k][i];
      m[k][i]=m[k][j];
      m[k][j]=s;
     }
   }
   cout << "\n";
 
   for (i=0; i<a; i++) {  // вывод нового массива на экран
    for (j=0; j<b; j++) cout<< m[i][j] << "  ";
    cout << "\n"; }
 
 return 0;
 
 }

перепроверила все, что могла. характеристики считает верно, столбцы переставляет, но в неведомом мне порядке, хоть тресни х_Х
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2009, 19:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка двумерного массива по столбцам (C++):

Сортировка двумерного массива по столбцам - C++
Вообщем нужно отсортировать двумерный массив по столбцам...приведенный ниже код сортирует по строкам, не получается сделать так, чтобы он...

Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам - C++
Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам.

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

Сортировка двумерного массива - C++
Задача: Написать код сортировки двумерного массива размерностью m*n. Переставить строки матрицы так, чтобы элементы k-го столбца были...

Сортировка двумерного массива - C++
Подскажите как отсортировать двумерный массив по возрастанию. Например дан такой массив двумерный: 9 7 4 1 2 3 5 5 5 Должен...

Сортировка двумерного массива - C++
Есть задачка с 3-ох пунктов. Первый я сделал(создать многомерный целочисельный масив заданый пользователем). А вот с двумя никак не могу...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.08.2009, 20:02 #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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <cmath>
#include <intrin.h>
int const a=4, b=6;
int i, j, har[b], m[a][b], s=0;
using namespace std;
int main ()
{
    for (i=0; i<a; i++, cout<<endl)
        for (j=0; j<b; j++)
        {
            m[i][j]= ((i+j)&1) ? (__rdtsc()%515)*(-1)+1 : (-__rdtsc())%153;
            cout<< m[i][j] << "  ";
        }
 
    cout<<endl;
    for (i=0; i<b; i++)             // подсчет характеристик и вывод их на экран
    {
        for (j=0; j<a; j++)
            if (m[j][i]<0 && m[j][i]%2!=0)
                har[i]+=m[j][i];
        har[i]*=-1, cout<<har[i]<<" ";
    }
    cout<<"\n";
 
    int zz;
    for(int zzz = 0; zzz<a; zzz++)
        for(i = 0; i < b-1; ++i)
            if(har[i] >= har[i+1])
            {
                for(int k = 0; k < a; ++k)
                {
                    s=m[k][i];
                    m[k][i]=m[k][i+1];
                    m[k][i+1]=s;
                }
                zz= har[i];
                har[i] = har[i+1];
                har[i+1] = zz;
            }
 
    cout<<endl;
    for (i=0; i<a; i++)
    {  // вывод нового массива на экран
        for (j=0; j<b; j++)
            cout<< m[i][j] << "  ";
        cout << "\n";
    }
    system("pause");
    return 0;
}
Старался по минимуму переделывать ваш код. Жду вопросы. В какой среде был написан код?
2
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
01.08.2009, 20:06 #3
Скажи а вообще зачем пишете все 8 строку!!!
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 20:07 #4
Цитата Сообщение от crashc Посмотреть сообщение
Скажи а вообще зачем пишете все 8 строку!!!
а вы удалите 8 строку и узнаете.
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
01.08.2009, 20:10 #5
Цитата Сообщение от crashc Посмотреть сообщение
Скажи а вообще зачем пишете все 8 строку!!!
чтобы потом не писать
C++
1
std::cout << "bla-bla" << std::endl;
Цитата Сообщение от zim22 Посмотреть сообщение
а вы удалите 8 строку и узнаете.
0
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
01.08.2009, 20:12 #6
а программа то не рабоет выводится ошибка
[C++ Error] Unit1.cpp(8): E2209 Unable to open include file 'intrin.h'
0
Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
01.08.2009, 20:21  [ТС] #7
ааа! всё ясно, переставила столбцы, а характеристики местами не поменяла, это ошибку и вызвало((

писала в турбо с++
что касается вопросов, то чем вот это:
Цитата Сообщение от M128K145 Посмотреть сообщение
cout<<endl;
отличается от cout<<\n?

остальное вроде ясно)) спасибо)
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.08.2009, 20:26 #8
для тех кто работает в Dev-C++ и в других средах в которых нет этой библиотеки можно поменять 14 строку на свой генератор случайных чисел

Добавлено через 3 минуты 2 секунды
ничем, просто \n - управляющий символ, а endl - манипулятор выходного потока cout
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 20:30 #9
Цитата Сообщение от M128K145 Посмотреть сообщение
ничем, просто \n - управляющий символ, а endl - манипулятор выходного потока cout
ничего себе ничем
endl (end line) переводит курсор на новую строку и сбрасывает буфер вывода. т.е. данные выведутся на экран немедленно.
вот что пишет мсдн
The manipulator calls _Ostr.put(_Ostr. widen('\n')), and then calls _Ostr.flush. It returns _Ostr.
т.е. endl делает немножко больше, чем простое помещение в поток управляющей последовательности \n
а именно: ещё и flush вызывает

std::flush - сбрасывать буфер вывода
0
Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
01.08.2009, 20:34  [ТС] #10
Цитата Сообщение от zim22 Посмотреть сообщение
endl (end line) переводит курсор на новую строку и сбрасывает буфер вывода. т.е. данные выведутся на экран немедленно.
т.е. endl использовать целесообразнее? или это от задачи зависит?
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 20:51 #11
Цитата Сообщение от Ленка Посмотреть сообщение
т.е. endl использовать целесообразнее? или это от задачи зависит?
почитайте здесь
***
вобщем используйте std::endl; это С++ стиль программирования.
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.08.2009, 21:30 #12
Я думаю, что если не критично быстродействие и не принципиальна работа с потоками, то пользоваться можно чем удобнее/привычнее.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2009, 21:30
Привет! Вот еще темы с ответами:

Сортировка двумерного массива... - C++
Дано: одномерный массив А заполненный случайными числами одномерный массив В заполненный случайными числами двумерный массив С...

Сортировка двумерного массива - C++
По бумажке расписал - вроде всё правильно, но работает некорректно. Где ошибка? void sort(int **p, int n, int m) { int...

Сортировка двумерного массива - C++
Input sample: 4 10 20 30 7 30 00 23 59 59 13 30 30 Output sample: 7 30 0 10 20 30

сортировка двумерного массива - C++
помоги отсортировать двумерный массив как в примере пример: 2 4 6 1 2 3 1 5 9 ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.08.2009, 21:30
Ответ Создать тему
Опции темы

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