С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 18.02.2013
Сообщений: 15
1

Массивом char[M][N] кодируется поле, на котором расположено

18.02.2013, 19:21. Показов 1667. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста с решением следующей задачи:
Массивом char[M][N] кодируется поле, на котором расположено несколько прямоугольников. Каждый состоит из целого числа клеток, разные прямоугольники не накладываются друг на друга и не соприкасаются. Разные прямоугольники могут состоять из разных символов. Один и тот же прямоугольник не может состоять из различных символов. Пустые квадраты поля кодируется символом '.'. Подсчитать число прямоугольников разных типов. Поле вводится с клавиатуры или читается из файла. Пример:
###...??..+.
###.=.??..+.
###.......+.
.....???....
???.......==
???...####..
Для этого поля программа должна выдать ответ:
#-прямоугольников: 2
?-прямоугольников: 3
+-прямоугольников: 1
=-прямоугольников: 2
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2013, 19:21
Ответы с готовыми решениями:

Как кодируется char в русской кодировке?
Здравствуйте всем :). Мой вопрос (скорее наблюдение) теоретический а не прикладной.Посмотрите...

Загрузить из dll диалог, на котором расположено 4 кнопки
загрузить из dll диалог, на котором расположено 4 кнопки

Вывести столбец матрицы, в котором расположено максимальное значение
Вывести на печать элементы столбца матрицы, в котором расположено максимально значение.

Для каждой переменной-отдельное поле или массивом в одно поле?
Можно ли несколько переменных загнать в массив через сериализацию в одну поле или все же...

2
5 / 5 / 6
Регистрация: 20.05.2012
Сообщений: 32
18.02.2013, 22:27 2
Лучший ответ Сообщение было отмечено Aragourn как решение

Решение

Проверки на правильность поля нету, также нету ввода с клавиатуры.
А так программа сама считывает типы символов(#, -, = , & и т.д.) и показывает результат.

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
main()
{
    int count = 0, len, i, j, k, l, m, flag, symbols_count = 0;
    int *rectangles;
    char **field;
    char str[128], symbols[10] = {0}, space = '.', current;
    FILE* inData;
 
    if((inData = fopen("text.txt", "r"))==NULL)
    {
        printf("Error\n");
        return 1;
    }
 
    while(fgets(str, 126, inData)!=NULL)
    {
        count++;
    }
 
    len = strlen(str);
 
    fclose(inData);
 
    field = (char **)malloc(count * sizeof(char *));
    for(i = 0; i < count; i++)
    {
        field[i] = (char *)malloc(len * sizeof(char));
    }
 
    inData = fopen("text.txt", "r");
    count = 0;
 
    while(fgets(str, 126, inData)!=NULL)
    {
        for(i = 0; i < len; i++)
        {
            field[count][i] = str[i];
            printf("%c", field[count][i]);
            flag = 0;
            for(j = 0; j < 10; j++)
            {
                if(symbols[j] == str[i])
                    flag = 1;
            }
            if(!flag)
            {
                symbols[symbols_count] = str[i];
                symbols_count++;
            }
        }
        count++;
        printf("\n");
    }
 
    rectangles = (int *)malloc(symbols_count * sizeof(int));
    for(i = 0; i < symbols_count; i++)
        rectangles[i] = 0;
 
    for(i = 0; i < count; i++)
    {
        for(j = 0; j < len; j++)
        {
            if(field[i][j] == space)
                continue;
 
            for(k = 0; k < symbols_count; k++)
                if(field[i][j] == symbols[k])
                    rectangles[k]++;
            
            current = field[i][j];
 
            for(l = i; l < count; l++)
            {
                if(field[l][j] != current)
                    break;      
 
                for(m = j; m < len; m++)
                {
                    if(field[l][m] == current)
                    {
                        field[l][m] = '.';
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
    }
 
    printf("\n");
 
    for(i = 0; i < symbols_count; i++)
    {
        if(symbols[i] == '.')
            continue;
        printf("%c = %d\n", symbols[i], rectangles[i]);
    }
 
    fclose(inData);
    for(i = 0; i < count; i ++)
    {
        free(field[i]);
    }
    free(field);
    free(rectangles);
}
0
1 / 1 / 0
Регистрация: 09.10.2016
Сообщений: 2
13.11.2017, 15:34 3
Всё вводим с клавы. Максимально простой вариант решения задачи.
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
#include <iostream>
#include <string>
using namespace std;
 
 
int main(void)
{
    int i,j,M,N,h,u,o,p,sharpcount=0,voproscount=0,pluscount=0,ravnocount=0;
    cout << "Vvedite M i N: ";
    cin >> M >> N;
    string chars[M][N],temp;
    N--;
    M--;
    for(i=0;i<=M;i++){
        for(j=0;j<=N;j++){
            cout << "Vvedite chars[" << i << "][" << j << "]: " << endl;
            cin >> chars[i][j];
        }
    }
    
    for(i=0;i<=M;i++){
        for(j=0;j<=N;j++){
            temp = chars[i][j];
            if(temp==".");
            else{
                
                
                if(temp=="#")sharpcount++;
                if(temp=="?")voproscount++;
                if(temp=="+")pluscount++;
                if(temp=="=")ravnocount++;
                
                
                for(h=i;h<=M;h++){
                    if(h+1>M){
                        break;
                    }
                    else{
                        if(chars[h+1][j]!=temp){
                            break;
                        }
                    }
                }
                
                
                for(u=j;u<=N;u++){
                    if(u+1>N){
                        break;
                    }
                    else{
                        if(chars[h][u+1]!=temp){
                            break;
                        }
                    }
                }
                
                for(o=i;o<=h;o++){
                    for(p=j;p<=u;p++){
                        chars[o][p]=".";
                    }
                }
            }
            
        }
    }
    cout << "# pryamougolnikov: " << sharpcount << endl;
    cout << "? pryamougolnikov: " << voproscount << endl;
    cout << "+ pryamougolnikov: " << pluscount << endl;
    cout << "= pryamougolnikov: " << ravnocount << endl;
    
    
 return 0;   
}
0
13.11.2017, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 15:34
Помогаю со студенческими работами здесь

Создать стек из 6 элементов, типы Word+Char, вывести поле Char, если word>100
Здравствуйте, помогите пожалуйста решить зачачу. Нужно создать стек из 6 элементов, типы...

Работа с массивом char
Вот задание Вам дана непустая строка, состоящая из строчных латинских букв, цифр и пробелов....

Работа с массивом char
Товарищи подскажите пожалуйста, не могу никак понять в чём проблема. Есть массив скажем: int X;...

Работа с массивом char
Добрый день. Объясните, если не сложно, на пальцах в чем ошибка? char*my1={&quot;first my1&quot;,&quot;second...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru