Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C (СИ) Определить координаты двух точек на границе площади, между которыми находится освещенная часть площади Здрасьте :) В общем. Довольно долго ломаю голову над задачей, вроде бы не сложная но решить никак не могу. Если кто сможет чем то помочь, буду очень благодарен. :) Для освещения прямоугольной площади, где проходило Новогоднее представление, установили мощный прожектор. Стороны площади были параллельны осям координат, а площадь поделена на сектора в количестве секторов по горизонтали и... https://www.cyberforum.ru/ c-beginners/ thread1768186.html C (СИ) Передача в функцию многомерного массива
Как передать в функцию многомерный массив при условии что он уже заранее известен и проинициализирован? double A = { {2.1, 3, 2}, { 1, 0, 1.3}, { 5, 0, 7.4} }; double B = { { 15, 7.1, 1, 0},
C (СИ) В заданном масиве необходимо переставить местами первый и минимальный элемент https://www.cyberforum.ru/ c-beginners/ thread1768103.html
в заданном числавом масиве необходимо переставить местами первый и минимальный элемент, а так же последний и максимальный элемент
C (СИ) Найти количество отрицательных чисел в матрице Дана таблица размера 5 х 10 заполненная целыми чмслами. Сообщить сколько в этой таблице отрицательных чисел. https://www.cyberforum.ru/ c-beginners/ thread1768020.html
Составить телефонный справочник C (СИ)
Составить телефонный справочник, содержащий сведения о телефонах абонентов, включающий следующие сведения: фамилия абонента, номер телефона, год установки телефона. Составить программу, выдающую следующую информацию:  По вводимому номеру телефона - данные абонента;  определяется количество телефонов, установленных с Х1 до Х2 года и выдаются данные о их владельцах(Х1 и Х2...
C (СИ) Вычислить произведение первых десяти элементов ряда заданного формулой https://www.cyberforum.ru/ c-beginners/ thread1767983.html
Вычислить произведение первых десяти элементов ряда заданного формулой: n/2^n
C (СИ) Сообщить, сколько в таблице отрицательных чисел Дана таблица размера 5 х 10 заполненная целыми числами .Сообщить сколько в этой таблице отрицательных чисел https://www.cyberforum.ru/ c-beginners/ thread1767980.html Конвертация с Pascal на C C (СИ)
Нужна помощь, нужно перевести программу с Pascal на C type Tname = (anna, boris, ekaterina, igor, marina, olga, yakov); Tdesc = text; const Titles: array of string = ('anna', 'boris', 'ekaterina', 'igor', 'marina', 'olga', 'yakov'); children: array of boolean = (
C (СИ) Неправильная работа с указателями на массивы ДД! Написал такой вот код, компилится нормально, но при выводе результатов в консоль видно, что в первых элементах просто нули, хотя должны быть данные, которые теперь значатся во вторых элементах массивов, т.е. сдвиг на одну позицию. Как это побороть? #include <stdlib.h> #include <stdio.h> int N; int *ptr; double *a, *b; https://www.cyberforum.ru/ c-beginners/ thread1766824.html C (СИ) Нахождение периметра прямоугольника https://www.cyberforum.ru/ c-beginners/ thread1766779.html
переделать на С #include <iostream> #include <fstream> #include <conio.h> using namespace std; typedef struct Point { int x; int y;
Нахождение суммы компонентов файла C (СИ)
#include <iostream> #include <fstream> #include <conio.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); ifstream ifs("input.txt");
C (СИ) Считать количество часов, минут и секунд между двумя временными точками https://www.cyberforum.ru/ c-beginners/ thread1766765.html
программа должна считать количество часов минут и секунд между двумя заданными временами #include <stdio.h> struct time{ int hours; int minutes; int seconds; }; int main(void){ struct time time1,time2,time3;
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
22.06.2016, 19:03 0

Выделение области одинаковых соседствующих элементов в матрице - C (СИ) - Ответ 9303005

22.06.2016, 19:03. Показов 1184. Ответов 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
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <stdio.h>
#include <malloc.h>
#define MAX_SZ  32
#define N       7
#define M       8
 
typedef struct {
    short row, col;
} pos;
 
typedef struct _page {
    struct _page* next;
    pos   arr[MAX_SZ];
    int   cnt;
} page;
 
typedef struct {
    page* lst;
} stack_t;
 
void stack_init(stack_t* st){ st->lst = NULL; }
int  stack_empty(stack_t* st) { return (st->lst == NULL); }
int  stack_push(stack_t* st, short row, short col);
void stack_pop(stack_t* st);
void stack_clear(stack_t* st);
void stack_top(stack_t* st, short* prow, short* pcol);
 
const short g_dirs[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
 
int main(void){
    stack_t st;
    short row, col, r1, c1, i, j, d, s, k, m;
    short mat[N][M] = {
        {1,1,0,0,1,1,1,1},
        {1,1,0,0,0,0,0,0},
        {0,0,0,0,0,1,0,0},
        {0,0,0,0,1,1,1,0},
        {1,1,0,1,1,1,1,1},
        {1,1,0,0,0,0,0,0},
        {1,1,1,0,0,0,1,1},
    };
 
    m = s = 0;
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j){
            if(mat[i][j] != 1)
                continue;
 
            mat[i][j] += 1;
            k = 0;
 
            stack_init(&st);
            stack_push(&st, i, j);
 
            while(! stack_empty(&st)){
                stack_top(&st, &row, &col);
                stack_pop(&st);
                ++k;
 
                for(d = 0; d < 4; ++d){
                    r1 = row + g_dirs[d][0];
                    c1 = col + g_dirs[d][1];
                    if((r1 < 0) || (c1 < 0) || (r1 >= N) || (c1 >= M) || (mat[r1][c1] != 1))
                        continue;
 
                    stack_push(&st, r1, c1);
                    mat[r1][c1] += 1;
                }
            }
 
            ++m;
            if(k > s)
                s = k;
        }
    }
 
    printf("count area: %d\n", m);
    printf("maximum  S: %d\n", s);
 
    //вывести результирующею матрицу
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j)
            printf("%d ", mat[i][j]);
        putchar('\n');
    }
    return 0;
}
 
//вставка
int stack_push(stack_t* st, short row, short col){
    page* p = st->lst;
    if(p != NULL){
        if((p->cnt + 1) < MAX_SZ){
            p->arr[p->cnt].row = row;
            p->arr[p->cnt].col = col;
            ++(p->cnt);
            return 1;
        }
    }
 
    p = (page*)malloc(sizeof(page));
    if(p == NULL)
        return 0;
    
    p->arr[0].row = row;
    p->arr[0].col = col;
    p->cnt  = 1;
    p->next = st->lst;
    st->lst = p;
    return 1;
}
 
//удаление
void stack_pop(stack_t* st){
    page* p = st->lst;
    if(p != NULL){
        if(p->cnt > 0)
            --(p->cnt);
 
        if(p->cnt == 0){
            st->lst = st->lst->next;
            free(p);
        }
    }
}
 
//удаление всех
void stack_clear(stack_t* st){
    while(! stack_empty(st))
        stack_pop(st);
}
 
//получение текущих данных
void stack_top(stack_t* st, short* prow, short* pcol){
    page* p = st->lst;
    if((p != NULL) && (p->cnt > 0)){
        *prow = p->arr[p->cnt - 1].row;
        *pcol = p->arr[p->cnt - 1].col;
    }
}


Вернуться к обсуждению:
Выделение области одинаковых соседствующих элементов в матрице C (СИ)
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2016, 19:03
Готовые ответы и решения:

Пара соседствующих одинаковых символов
Даны символы s1, s2, … Известно, что символ s1 отличен от восклицательного знака и что среди s2,...

Выяснить, имеются ли тройки соседствующих одинаковых символов
Здравствуйте ,прошу о помощи так как не могу написать программу не используя строк и массивов(что...

Определить, есть ли в строке пара соседствующих одинаковых символов
Тема: строки. Задание: Дана строка символов. Выяснить, имеется ли в строке пара соседствующих...

Определить, имеются ли в строке два соседствующих одинаковых символа
Привет всем:) Нужно разработать программу, которая для заданной строки s определяет, имеются ли в...

1
22.06.2016, 19:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2016, 19:03
Помогаю со студенческими работами здесь

Выяснить, имеется ли среди s1,...,sn пара соседствующих одинаковых символов
Даны символы s1, s2,... Известно, что символ s1 отличен от восклицательного знака и что среди s2,...

Выяснить, имеется' ли среди s1,…,sn пара соседствующих одинаковых символов
Выяснить, имеется' ли среди s1,…,sn пара соседствующих одинаковых символов.

Определить, имеются ли в строке два соседствующих одинаковых символа
определить,имеются ли в строке два соседствующих одинаковых символа

Проверить, имеются ли в строке два соседствующих одинаковых символа
Выясните, имеются ли в строке S два соседствующих одинаковых символа.

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru