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

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

Войти
Регистрация
Восстановить пароль
 
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
#1

Матрицы и другой примитив... - C++

20.03.2009, 00:26. Просмотров 793. Ответов 8
Метки нет (Все метки)

Вообщем есть 3 задачки:
1) В векторе из 10 элем. переставить их так, чтоб сначало были все отрицательные элементы, а потом все остальные, без нарушения порядка их следования.
Попробывал сделать методом пузырька. Отрицательные элементы отсеиваются правильно, а вот положительные идут в неправильном порядке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int i,j;
float mas[10],rab=0;
cout<<"Vvedite 10 elementov masiva "<<endl;
for (i=0;i<10;i++)
 cin>>mas[i];
for (i=0; i<10; i++)
for (j=0; j<9; j++)
     if(mas[j]>0)
    {
     rab=mas[j];
     mas[j]=mas[j+1];
     mas[j+1]=rab;
     }
cout<<"MASSIV \n\n";
for(i=0;i<10;i++)
cout<<mas[i]<<" ";
2) Отсортировать по уменьшению массив максимальных элементов столбцов матрицы.

C++
1
2
3
4
5
6
7
8
int i,j;
inf matr[5][5], mas[5];
cout<<"Zapolnenie matrici\n";
    for(i=0;i<5;i++)
      for(j=0;j<5;j++)
          cin>>*(*(matr+i)+j);
....
....
Дальше вроде понимаю что нужно делать, найти макс. элем. каждого столбца, закинуть их в другой массив и отсортировать, но как записать незнаю


3) Ввести списки 2х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
Это я даже примерно незнаю как делать

Надеюсь кто-то поможет студенту
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2009, 00:26     Матрицы и другой примитив...
Посмотрите здесь:

C++ Примитив
C++ Все положительные элементы матрицы записать в один одномерный массив, а остальные в другой
Если самое верхнее число в этом столбце есть ноль, то меняют всю первую строку матрицы с другой строкой матрицы, где в этой колонке нет нуля. C++
Примитив к.игры, проблемы в классе C++
C++ Записать в другой массив строку, составленную из сумм отрицательных элементов столбцов матрицы
C++ Записать все нечетные элементы матрицы в один массив, а четные - в другой
C++ Графический примитив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
profan_Artem
4 / 4 / 0
Регистрация: 17.02.2009
Сообщений: 18
20.03.2009, 01:02     Матрицы и другой примитив... #2
1.
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
#include <iostream>
using namespace std;
 
void main()
{
    int const n = 20;             // Г°Г*çìåðГ*îñòü Г¬Г*Г±Г±ГЁГўГ*
    int vector[ n ], store = 0;    //
    int i, k = 0;        
    
    
    
    for ( i = 0; i < n; i++ ) {       // öèêë äëÿ ââîäГ* 20 Г§Г*Г*Г·ГҐГ*ГЁГ©
        cout<< "Input numbers please :";
            cin>> vector[ i ];
    }
 
    for ( i = 0; i < n; i++ )        // ГўГ*ГҐГёГ*èéöèêë äëÿ ïðîâåðêè ГІГҐГЄГіГ№ГҐГЈГ® Г§Г*Г*Г·ГҐГ*ГЁГї
        if ( vector[ i ] < 0)        // åñëè Г®Г* < 0, ГІГ®
    
    
        {                          
            store = vector[ i ];      // Г§Г*ïîìèГ*Г*ГҐГ¬ ýòîò ГЅГ«-ГІ
            
            
            for ( int j = i; j > k ; j-- ) // öèêë äëÿ ñìåùåГ*ГЁГї ГЅГ«-òîâ,
                if ( vector[ j - 1 ] < 0 ) // åñëè ГЅГ«-ГІ, ïåðåä ГІГҐГЄГіГ№ГЁГ¬ ÓÆÅ îòðèöГ*òåëüГ*ûé
                    continue;              // Г*èõåðГ* Г*ГҐ äåëГ*ГҐГ¬, ïåðåõîäèì ГЄ ГўГ*ГҐГёГ*åìó öèêëó  
                else                         
                    vector[j]  = vector[ j - 1 ]; // ГЁГ*Г*Г·ГҐ ñìåùГ*ГҐГ¬ ГўГ±ГҐ ГЅГ«-ГІГ»
                
                    vector[ k ] = store ;         // ïåðåГ*îñèì îòðèöГ*òåëüГ*ûå Г§Г*Г*Г·ГҐГ*ГЁГї
                    k++;                                                 
                
        }
                    
 
    for ( i = 0; i < n; i++ )        // öèêë äëÿ âûâîäГ* ðåç-òîâ Г*Г* ГЅГЄГ°Г*Г*
        cout << vector[ i ] << " " ;
         if( i % 10 )
             cout<< endl;
 
    system("pause");
}
во второй задаче нужно отсортировать макс элементы масива или упорядоить столбцы матррици по макс эл-м?
в третьей задаче... вообщем какую тему вы проходите структуры или массивы и указатели?
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
20.03.2009, 12:22  [ТС]     Матрицы и другой примитив... #3
Цитата Сообщение от profan_Artem Посмотреть сообщение
1.

во второй задаче нужно отсортировать макс элементы масива или упорядоить столбцы матррици по макс эл-м?
в третьей задаче... вообщем какую тему вы проходите структуры или массивы и указатели?
Во второй, Я так понял, нужно найти макс элемент каждого столбца матрицы и упорядочить эти элементы по уменьшению.
Насчет 3го.
Всё проходим. Темы: массивы, указатели, ряды, структура.
К какой точно теме относится эта задача сказать немогу.
profan_Artem
4 / 4 / 0
Регистрация: 17.02.2009
Сообщений: 18
20.03.2009, 15:00     Матрицы и другой примитив... #4
2. прогу напиши сам
создай 1 масив n*m, заполни его. второй масив для запоминния =0
введи переменную для сравнения compare = 0;

в цикле проходи по 1 масиву ПО СТОЛБЦАМ
, сравнивай compare с текущим ел -том столбца, если compare > эл-та, compare = эл-ту, заносим этот эл-т во второй массив(создай переменную для инкремента индексов второго массива),
compare = 0, переход к следующему столбцу
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
21.03.2009, 23:04  [ТС]     Матрицы и другой примитив... #5
profan_Artem Спасибо большое за подсказку 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
void main ()
{
int a=0,i,j,c=0;
int matr[5][5], mas[5];
cout<<"Vvedite matricy: \n";
      for(i=0; i<5; i++)
        for(j=0; j<5; j++)   
          cin>> matr[i][j];
        for (j=0; j<5; j++)
        {
          c=0;
         for (i=0; i<5; i++) 
           if (matr[i][j]>c)
           c=matr[i][j];      
            mas[a++]=c;
        }
for (i=0; i<5; i++)
  for (j=0;j<4;j++)
     if(mas[j]<mas[j+1])
     {
         c=mas[j];
         mas[j]=mas[j+1];
         mas[j+1]=c;
     }
cout<<"Otsortirovannii massiv max elementov stolbcov matrici: \n";
for (i=0; i<5; i++)
cout<<mas[i]<<" ";
getch(); }
Осталось 3е:
3) Ввести списки 2х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
Подскажите хотяб, как это сделать....
ISergey
Maniac
Эксперт С++
1347 / 880 / 52
Регистрация: 02.01.2009
Сообщений: 2,645
Записей в блоге: 1
21.03.2009, 23:48     Матрицы и другой примитив... #6
Так пойдет
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
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
struct Stud
{
    char name[60];
    int  year;
    int  sr_b;
 
    Stud(char *_name = "",int y = 0, int s = 0):year(y),sr_b(s)
    {
        strcpy_s(name,_name);
    }
};
 
ostream &operator<<(ostream &stream, Stud &sd)
{
    stream
        <<"Name : " <<sd.name<<endl
        <<"Year : " <<sd.year<<endl
        <<"srBal: "<<sd.sr_b;
    return stream;
}
 
bool fun_sort(const Stud &x, const Stud &y){ return x.sr_b > y.sr_b; }
 
int main()
{
    std::vector<Stud> grup1;
    std::vector<Stud> grup2;
 
    grup1.push_back(Stud("grup1_1",18,5));
    grup1.push_back(Stud("grup1_2",19,6));
    grup1.push_back(Stud("grup1_3",18,1));
    grup1.push_back(Stud("grup1_4",18,2));
    grup1.push_back(Stud("grup1_5",18,3));
    grup1.push_back(Stud("grup1_6",18,4));
 
    grup2.push_back(Stud("grup2_1",18,0));
    grup2.push_back(Stud("grup2_2",19,7));
    grup2.push_back(Stud("grup2_3",17,10));
    grup2.push_back(Stud("grup2_4",18,3));
    grup2.push_back(Stud("grup2_5",20,3));
    grup2.push_back(Stud("grup2_6",18,4));
 
    std::sort(grup1.begin(),grup1.end(), fun_sort);
    std::sort(grup2.begin(),grup2.end(), fun_sort);
 
    std::vector<Stud> vec(grup1.size() + grup2.size());
 
    std::copy (grup1.begin(),grup1.end(),vec.begin());
    std::copy (grup2.begin(),grup2.end(),vec.begin()+ grup1.size());
 
    std::inplace_merge(vec.begin(),vec.begin() + grup1.size(),vec.end(), fun_sort);
 
    std::vector<Stud>::iterator it;
    for(it = vec.begin(); it != vec.end(); ++it)
        cout<<*it<<endl<<endl;
 
    return 0;
}
P.S. STL Algorithms
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
25.03.2009, 09:23  [ТС]     Матрицы и другой примитив... #7
ISergey Спасибо тебе за старания, но это немного не то, что нужно...
Сейчас перечитал материал, что давали с этими задачами и написал код более подходящий к тому материалу, но код нуждается в серьезной доработке, нужно отсортировать 2 списка + написать ф-цию для слияния этих 2х списков и сортировки получившегося большого списка.

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <student.h>
using namespace grup;
void main()
{
int n;
cout<<"Vvedite kolichestvo studentov v 1i gryppe=";
char kolTMP[10];   
cin.getline(kolTMP,10); //Делаем защиту от
n=atoi(kolTMP);         //ошибочного ввода
if(!n) return;
stud *IB=new stud[n];
input(IB,n);
outandsort(IB,n);
cout<<"Vvedite kolichestvo studentov vo 2i gryppe=";
cin.getline(kolTMP,10); //Делаем защиту от
n=atoi(kolTMP);         //ошибочного ввода
if(!n) return;
input(IB,n);
outandsort(IB,n);
delete []IB;
}
student.h
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
#include <iostream>
using namespace std;
namespace grup
    {
        struct stud
        {
                char FIO[80];
                float bal;
        };
         void input(stud *IB,int n);
        //Функция для ввода с клавиатуры
         void outandsort(stud *IB,int n);
        //Функция для вывода на экран
    }  
         void grup::input(stud *IB,int n)
        //Функция для ввода с клавиатуры
        {
                for(int i=0;i<n;i++)
                {
                       cout<<"Vvedite imja studenta "<<endl;
                       cin.getline(IB[i].FIO,80);
                       char strTMP[10];
                       cout<<"Vvedite bal studenta "<<endl;
                       cin.getline(strTMP,80);
                       IB[i].bal=atoi(strTMP);
                }
        };
        void grup::outandsort(stud *IB,int n)
        //Функция для сортировки и вывода на экран
        {
                for(int i=0;i<n;i++)
                {
                       cout<<IB[i].FIO<<'\t'<<IB[i].bal<<endl; // <-- Нужна сортировка по убыванию среднего бала
                }
        };
Напомню, задача звучит так:
Ввести списки 2х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
До завтрашнего вечера нужно уже сделать, помогайте

Добавлено через 11 часов 52 минуты 33 секунды
Тоесть, уже до сегодняшнего вечера.

Добавлено через 19 часов 41 минуту 31 секунду
Задача решена..
profan_Artem
4 / 4 / 0
Регистрация: 17.02.2009
Сообщений: 18
25.03.2009, 23:59     Матрицы и другой примитив... #8
выложи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2009, 12:34     Матрицы и другой примитив...
Еще ссылки по теме:

Как поменять знак элементов матрицы, и как вычесть элементы одной строки из другой строки? C++
C++ Написать программу: считать две матрицы из файла и записать их в другой файл
Считывание элементов матрицы из файла и запись ответов в другой текстовый файл C++
C++ Перенести в один другой массив четные числа.Затем перенести в еще один другой массив нечетные числа.
Из массива перенести четные элементы в другой массив.А нечетные перенести в другой массив C++

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

Или воспользуйтесь поиском по форуму:
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
26.03.2009, 12:34  [ТС]     Матрицы и другой примитив... #9
выложи
main.cpp
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
#include <student.h>
#include <conio.h>
using namespace grup;
void main()
{
int n,m,j;
char kolTMP[10]; 
cout<<"Vvedite kolichestvo studentov v 1i gryppe=";  
cin.getline(kolTMP,10);
n=atoi(kolTMP);     
if(!n) return;
stud *IB1=new stud[n];
input(IB1,n);
outandsort(IB1,n);
 
cout<<"Vvedite kolichestvo studentov vo 2i gryppe=";
cin.getline(kolTMP,10);
m=atoi(kolTMP);  
if(!n) return;
stud *IB2=new stud[m]; 
input(IB2,m);
outandsort(IB2,m);
stud *IB3=new stud[n+m]; 
for(int i=0;i<n;i++)
   IB3[i]=IB1[i];
 
for(i=n,j=0;i<n+m,j<m;i++,j++)
   IB3[i]=IB2[j];
 
delete [] IB1;
delete [] IB2;
getch();
cout<<"Objedenennii Spisok 2x gryp, po ybivaniu srednego bala:\n";
outandsort(IB3,n+m); 
delete [] IB3;
getch();
 
}
student.h
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
#include <iostream>
using namespace std;
namespace grup
    {
        struct stud
        {
                char FIO[80];
                float bal;
        };
 
         void input(stud *IB,int n);
         void outandsort(stud *IB,int n);
    }  
         void grup::input(stud *IB,int n)
        {
                for(int i=0;i<n;i++)
                {
                       cout<<"Vvedite imja studenta "<<endl;
                       cin.getline(IB[i].FIO,80);
                       char strTMP[10];
                       cout<<"Vvedite bal studenta "<<endl;
                       cin.getline(strTMP,80);
                       IB[i].bal=atoi(strTMP);
                }
        
        };
 
        void grup::outandsort(stud *IB,int n)
        {
            
    for(int i=0;i<n-1;i++)
      for(int j=i+1;j<n;j++)
         if(IB[i].bal<IB[j].bal)
          {
              stud tmp;
               tmp=IB[i];
               IB[i]=IB[j];
               IB[j]=tmp;
           }
 
       for(i=0;i<n;i++)
         {
             cout<<IB[i].FIO<<'\t'<<IB[i].bal<<endl;
         }
};
Yandex
Объявления
26.03.2009, 12:34     Матрицы и другой примитив...
Ответ Создать тему
Опции темы

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