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

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

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

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

20.03.2009, 00:26. Просмотров 802. Ответов 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х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
Это я даже примерно незнаю как делать

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

Примитив - C++
1) Дано трех значное число. Определить, равен ли квадрат этого числа сумме кубов его цифр. 2)Описать функцию, вычисляющую значение...

Графический примитив - C++
Написать программу, рисующую данную фигуру. p.s подскажите, есть ли какие-нибудь графические библиотеки для dev c++ ?

Примитив к.игры, проблемы в классе - C++
Проблема показана в атаче Помогите пожалуйста, что не так #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;lang.h&quot; using...

Найти количество элементов матрицы, которые совпадают с элементами другой матрицы - C++
Помогите найти количество элементов 2 мерного массива, которые совпадают с элементами другого аналогичного массива. Массив 5х3.

Если самое верхнее число в этом столбце есть ноль, то меняют всю первую строку матрицы с другой строкой матрицы, где в этой колонке нет нуля. - C++
Помогите реализовать это условие задачи! #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(int argc, char...

Считывание элементов матрицы из файла и запись ответов в другой текстовый файл - C++
Помогите пожалуйста написать программу для считывания элементов матрицы размером М х N из файла для вывода на экран, и записи ответа в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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");
}
во второй задаче нужно отсортировать макс элементы масива или упорядоить столбцы матррици по макс эл-м?
в третьей задаче... вообщем какую тему вы проходите структуры или массивы и указатели?
1
Lainus
0 / 0 / 0
Регистрация: 19.03.2009
Сообщений: 9
20.03.2009, 12:22  [ТС] #3
Цитата Сообщение от profan_Artem Посмотреть сообщение
1.

во второй задаче нужно отсортировать макс элементы масива или упорядоить столбцы матррици по макс эл-м?
в третьей задаче... вообщем какую тему вы проходите структуры или массивы и указатели?
Во второй, Я так понял, нужно найти макс элемент каждого столбца матрицы и упорядочить эти элементы по уменьшению.
Насчет 3го.
Всё проходим. Темы: массивы, указатели, ряды, структура.
К какой точно теме относится эта задача сказать немогу.
0
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, переход к следующему столбцу
1
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х студентских групп, упорядоченных по убыванию среднего бала. Выполнить слияние списков в один список, упорядоченный по томуже ключу.
Подскажите хотяб, как это сделать....
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 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
1
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 секунду
Задача решена..
0
profan_Artem
4 / 4 / 0
Регистрация: 17.02.2009
Сообщений: 18
25.03.2009, 23:59 #8
выложи
0
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;
         }
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2009, 12:34
Привет! Вот еще темы с ответами:

Написать программу: считать две матрицы из файла и записать их в другой файл - C++
считать две матрицы из файла и записать их в другой файл. Добавлено через 3 часа 26 минут актуально

Записать все нечетные элементы матрицы в один массив, а четные - в другой - C++
Гуру с++, помогите, пожалуйста, с задачкой! Все элементы матрицы М(3;5), имеющие нечетные значения записать в массив М1, а четные - в М2! ...

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

Записать в другой массив строку, составленную из сумм отрицательных элементов столбцов матрицы - C++
Помогите пожалуйста) Дана матрица N x M.Записать в другой массив строку, составленную из сумм отрицательных элементов столбцов матрицы. ...


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

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

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