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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Chunk
1 / 1 / 0
Регистрация: 29.09.2009
Сообщений: 30
#1

Двухмерные массивы(матрица символов) - C++

12.10.2009, 15:44. Просмотров 1854. Ответов 14
Метки нет (Все метки)

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

Помогите чем сможете пожалуйста я ваще в массивах не разбираюсь(((и если можно блок схему еще помогите составить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2009, 15:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двухмерные массивы(матрица символов) (C++):

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

Функции, двухмерные массивы - C++
Почему не работает функция#include "stdafx.h" #include <iostream> using namespace std; int matruca(int a, int m, int n ) {for...

двухмерные и трёхмерные массивы - C++
работа с двухмерными и трёх мерными массивами(индексами и указателями)...что рассказать преподу и какую прогу написать? :help: ...

двухмерные массивы (Сформулировать вектор) - C++
Дан массив А(n,n).Сформулировать вектор B(k) из a(i,j)<0. На печать вывести исходный массив, полученный вектор и его размерность.

Одномерные и двухмерные массивы, набрать код - C++
Помогите решить задачи на массивы С++ На начальном уровне С++ без принт *. Буду очень благодарен 1)Дана матрица A(n,n). Получить...

Как объявлять указатели на двухмерные массивы? - C++
Чет связь больно близкая, по моему указатель когда указываешь на массив, он превращается в массив, только безразмерный. # include...

14
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.10.2009, 16:04 #2
ввод откуда? язык (С или С++)?
1
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 16:06 #3
А если в строке или столбце количественно преобладают два символа? Вывести любой из них на экран или первый символ строки или столбца?
1
Chunk
1 / 1 / 0
Регистрация: 29.09.2009
Сообщений: 30
12.10.2009, 16:12  [ТС] #4
Цитата Сообщение от TanT Посмотреть сообщение
ввод откуда? язык (С или С++)?
C++

Добавлено через 1 минуту
Цитата Сообщение от valeriikozlov Посмотреть сообщение
А если в строке или столбце количественно преобладают два символа? Вывести любой из них на экран или первый символ строки или столбца?
Первый символ строки или столбца
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 16:14 #5
TanT, Уступаю, потому что начал пить водку. У меня в голове сформировался алгоритм решения этой задачи. Если интересует то могу написать свои задумки.
1
Chunk
1 / 1 / 0
Регистрация: 29.09.2009
Сообщений: 30
12.10.2009, 16:16  [ТС] #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
TanT, Уступаю, потому что начал пить водку. У меня в голове сформировался алгоритм решения этой задачи. Если интересует то могу написать свои задумки.
Интерисует конечно))
1
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.10.2009, 17:16 #7
как-то так и внимание в файле с данными первые две цифры это количество столбцов и строк соответственно
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
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main()
{
    int col, row, temp, repeat;
    char *File="temp.txt";          // исходный фаил
    char** arr;
  char tempChar;
    ifstream f(File);
    if (!f.is_open())                   // проверка наличия файла с данными о клиентах
    { cout<<"ERROR: not file:"<<File<<endl; }
    else
    {   f >>col; // считываем количество столбцов
        f >>row; // считываем количество строк
    //  cout<<col<<" "<<row<<endl;
 
        // выделяем память под двумерный массив
     arr = new char* [col];
        for (int i=0; i<col; i++)
            arr[i]=new char[row];
 
        // считываем из файла данные
        for (int j=0; j<row; j++)   
        {
            for (int i=0; i<col; i++)
            {
                f>>arr[i][j];
                cout<<" "<<arr[i][j];
            }
            cout<<endl;
        }
    } // end else
 
    // поиск совпадающих символов в столбцах
    cout<<endl;
    for (int i=0; i<col; i++)               // прогон по всем столбцам
    {   repeat=0;   
        for (int j=0; j<row; j++)
        { temp=0;
            for (int k=0; k<row; k++)
                if (arr[i][j]==arr[i][k]) 
                    temp++;
            
            if(repeat<temp)
            {
                repeat=temp; tempChar=arr[i][j]; 
            }
        }
        cout<<" "<<tempChar;
    }
 
    // поиск совпадающих символов в строках
 
    for (int i=0; i<row; i++)               // прогон по всем строкам
    {   repeat=0;   
        for (int j=0; j<col; j++)
        { temp=0;
            for (int k=0; k<col; k++)
                if (arr[j][i]==arr[k][i]) 
                    temp++;
            
            if(repeat<temp)
            {
                repeat=temp; tempChar=arr[j][i];
            }
        }
        cout<<"\n"<<tempChar;
    }
    cout<<endl;
    system("pause");
    return 0;
}
1
Вложения
Тип файла: txt temp.txt (47 байт, 28 просмотров)
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.10.2009, 17:18 #8
valeriikozlov, не надо травить душу... а вообще с наступающим вас алкогольным опьянением
1
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 17:22 #9
Извиняюсь за спасибо, но это нечаянно брат нажал. Ваша программа в процессе изготовления.

Добавлено через 44 секунды
TanT, Спасибо
1
Chunk
1 / 1 / 0
Регистрация: 29.09.2009
Сообщений: 30
12.10.2009, 18:32  [ТС] #10
спасибо большое)
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.10.2009, 20:40 #11
TanT,
Я немного подправил Ваш код в соответствии с пожеланиями клиента:

Цитата Сообщение от Chunk Посмотреть сообщение
Цитата:Сообщение от valeriikozlov
А если в строке или столбце количественно преобладают два символа? Вывести любой из них на экран или первый символ строки или столбца?
Первый символ строки или столбца
Вот что получилось:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <fstream>
 
using namespace std;
 
int i, j;
int main()
{
        int col, row, temp, repeat;
        char *File="temp.txt";                  // èñõîäГ*ûé ГґГ*ГЁГ«
        char** arr;
  char tempChar;
        ifstream f(File);
        if (!f.is_open())                                       // ïðîâåðêГ* Г*Г*ëè÷èÿ ГґГ*éëГ* Г± Г¤Г*Г*Г*ûìè Г® êëèåГ*ГІГ*Гµ
        { cout<<"ERROR: not file:"<<File<<endl; }
        else
        {       f >>col; // ñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ñòîëáöîâ
                f >>row; // ñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ñòðîê
        //      cout<<col<<" "<<row<<endl;
 
                // âûäåëÿåì ГЇГ*ìÿòü ïîä äâóìåðГ*ûé Г¬Г*Г±Г±ГЁГў
         arr = new char* [col];
                for (i=0; i<col; i++)
                        arr[i]=new char[row];
 
                // ñ÷èòûâГ*ГҐГ¬ ГЁГ§ ГґГ*éëГ* Г¤Г*Г*Г*ûå
                for (j=0; j<row; j++)       
                {
                        for (i=0; i<col; i++)
                        {
                                f>>arr[i][j];
                                cout<<" "<<arr[i][j];
                        }
                        cout<<endl;
                }
        } // end else
 
        // ïîèñê ñîâïГ*Г¤Г*ГѕГ№ГЁГµ ñèìâîëîâ Гў ñòîëáöГ*Гµ
        cout<<endl;
        int a;
        for (i=0; i<col; i++)                               // ïðîãîГ* ГЇГ® ГўГ±ГҐГ¬ ñòîëáöГ*Г¬
        {       repeat=0;
                a=0;
                for (j=0; j<row; j++)
                { temp=0;
                        for (int k=j; k<row; k++)
                                if (arr[i][j]==arr[i][k]) 
                                        temp++;                        
                        if(repeat==temp)
                            a=0;
                        if(repeat<temp)
                        {
                                repeat=temp; tempChar=arr[i][j]; a=1; 
                        }
 
                }
                if(a==1)
                    cout<<" "<<tempChar;
                else
                    cout<<" "<<arr[i][0];
 
        }
 
        // ïîèñê ñîâïГ*Г¤Г*ГѕГ№ГЁГµ ñèìâîëîâ Гў ñòðîêГ*Гµ
 
        for ( i=0; i<row; i++)                               // ïðîãîГ* ГЇГ® ГўГ±ГҐГ¬ ñòðîêГ*Г¬
        {       repeat=0;  
                a=0;
                for (j=0; j<col; j++)
                { temp=0;
                        for (int k=j; k<col; k++)
                                if (arr[j][i]==arr[k][i]) 
                                        temp++;
                        if(repeat==temp)
                            a=0;                        
                        if(repeat<temp)
                        {
                                repeat=temp; tempChar=arr[j][i]; a=1;
                        }
                }
                if(a==1)
                    cout<<"\n"<<tempChar;
                else
                    cout<<"\n"<<arr[0][i];
        }
        cout<<endl;
        system("pause");
        return 0;
}
0
WatchO.out
16.10.2009, 17:17 #12
Помогите пожалуйста, завтра лабораторная по программированию, а я всё никак не могу сделать задачу ( С ++ в Visual Studio):
"Переставить строки матрицы соответственно по возростанию элементов второго столбца."

Это всё условие, больше НИЧЕГО не дано.

Умоляю, сделайте эту штуку, ато завтра утром лабораторная уже =(((
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.10.2009, 18:32 #13
Вот код:
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
#include <iostream.h>
#include <windows.h>
int **mas, n, m, i,j, min, temp;
int main ()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå êîëè÷åñòâî ñòðîê Г¬Г*Г±Г±ГЁГўГ*: "<< endl;
    cin>>n;
    cout<<"Ââåäèòå êîëè÷åñòâî ñòîëáöîâ Г¬Г*Г±Г±ГЁГўГ*: "<< endl;
    cin>>m;
    mas=new int*[n];
    for(i=0; i<n; i++)
       mas[i]=new int[m];
    cout<<"Ââåäèòå ýëåìåГ*ГІГ» Г¬Г*Г±Г±ГЁГўГ*: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<m; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>mas[i][j];
       }
    cout<<"Исходный массив:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<m; j++)
          cout<<mas[i][j];
       cout<<endl;
    }
    for(i=0; i<n; i++)
    {
        min=i;
        for(j=i; j<n; j++)
            if(mas[min][1]>mas[j][1])
                min=j;
        for(j=0; j<n; j++)
        {
            temp=mas[i][j];
            mas[i][j]=mas[min][j];
            mas[min][j]=temp;
        }
    }
    cout<<endl;
           cout<<"Отсортированный массив"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<m; j++)
          cout<<mas[i][j];
        cout<<endl;
    }       
    cout<<endl;
         return 0; 
}
Только учтите что вторым столбцом, в моем коде является столбец с индексом 1 (т.к. индексация столбцов начинается с 0).
1
WatchO.out
16.10.2009, 20:32 #14
valeriikozlov,
я так понимаю, это мне? )) Спасибо огромное =)
Только я "чайник", по этому не понял, что значит ваша фраза:
"
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Только учтите что вторым столбцом, в моем коде является столбец с индексом 1 (т.к. индексация столбцов начинается с 0).


Ааааа, я кажется понял =)
А индексацию нельзя сделать по порядку, начиная с 1 ??
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
16.10.2009, 20:42 #15
WatchO.out,
Индексацию переделать нельзя, да и не в ней дело.
Ладно, объясню проще, например:
Исходный массив:
2 5 3 7 9
1 2 5 6 2
3 0 5 6 3

Полученный массив:
3 0 5 6 3
1 2 5 6 2
2 5 3 7 9
Т.е. сортировка была по значениям вот этого столбца:
5
2
0
Для Вас он второй (так ведь?)
А индекс у этого столбца = 1.(ну и ничего страшного, пусть будет 1)
0
16.10.2009, 20:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2009, 20:42
Привет! Вот еще темы с ответами:

Двухмерные массивы: Вычисление сумм элементов - C++
Здравствуйте, дорогие форумчане. ----------------------------------- Помогите, пожалуйста, решить задачу. Даны действительные числа...

Двухмерные массивы. Нахождение min значения в каждой строке. - C++
Помогите решить задачу. Дана матрица ахв, найти минимальное значение в каждой строке. не понять мне как присвоить найденное...

Нужно продублировать строку содержащую все нечетные элементы двухмерные массивы - C++
Всем привет! Есть задание по программированию на с++ Нужно продублировать строку содержащую все нечетные элементы Такую строку я...

Двухмерные массивы. Вывод макс элем над вспом диагональю, обнуление столбца - C++
Помогите пожалуйста решить задачку... Дана матрица Х(7,7) найти максимальный элемент, находящийся выше вспомогательной диагонали,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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