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

на С++ Черно-белая графика - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вопрос по односвязному списку. http://www.cyberforum.ru/cpp-beginners/thread352063.html
Ребят у меня такой вопрос! Нам в универе дали задание реализовать односвязный список на базе массива с индексными указателями. Все хорошо, я знаю как сделать обычный список!А вот дополнение через массив указателей не много не догоняю! Обьясните пожалста!
C++ Буквенные сочетания. Всем привет. Озадачился. Есть 2 регистра англ. алфавита, хочу вывести все 2х буквенные сочетания верхнего и нижнего регистра и соответственно нижнего с верхним и наоборот, на выходе 4 массива сочетаний. Хотел сначала задать unsigned char Eng_Up={'A', 'B',.......}, но потом подумал как преобразовать на выходе именно в строку 'AA', 'AB'...., поэтому начал задавать массивы строк и уперся в стену... http://www.cyberforum.ru/cpp-beginners/thread352061.html
C++ Аффинные пространства
Помогите пожалуйста, у кого - нибудь есть готовая программа под Visual Studio 2008 реализации операций с аффинными элементами аффинного пространства или посоветовать книгу где есть эта программа?
Построение бинарного дерева из строки C++
Доброго времени суток, уважаемые. Хотел бы спросить у вас спросить совета относительно реализации следующей проблемы: Задано арифметическо-логическое выражение (к примеру, (A+B-7*(3+C)>12)OR(B-A+19<7)), которое нужно перевести в дерево. Собственно интересует меня не код программы, а возможные алгоритмы решения данной задачи - т.е. последовательность построения дерева и добавления узлов. ...
C++ Необходимо накопить сумму всех элементов массива, находящихся в интервале от А до В, и вывести её на экран. http://www.cyberforum.ru/cpp-beginners/thread352025.html
Всем доброго времени суток!!! Вкратце о проблеме: учусь на гуманитарном, новая специальность, никакой учебной программы нет. И тут нам начали впаривать информатику, программирование, причем за 2 месяца пытались натаскать до уровня написания легких программ... Вы представляете, что получилось... Но требуют, как будто мы программисты... Времени осталось в обрез... Все попытки хотя бы установить...
C++ Перезапись части информации в файле Доброго времени суток. Возникла интересная проблема, как видно из заголовка темы, не могу перезаписать опредиленный кусок файла - он записывается в нужное место, но удаляется все остальное. Итак попорядку, вот тут я записываю инфу в файл: ofstream fout("DATA.uid",ios::binary|ios::in|ios::out); //файл if (!fout) { MessageBox(hDlg, "Ошибка при открытии файла.", "Ошибка",... подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.09.2011, 16:50     на С++ Черно-белая графика
serik13, вот вариант набросал, если что писал в торопях.
Формат входящего файла:
10
1 1 1 0 0 1 1 1 0 1
1 0 1 0 1 1 0 1 0 0
1 1 1 0 1 0 0 1 0 0
0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 1 1 0 1
0 0 0 0 0 0 1 0 0 1
1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 1 1 1 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void is_col(int**, int row, int col, const int size);
void is_row(int**, int row, int col, const int size);
void count_island(int**, const int size, int& len);
 
int  main(void) {
     int size = 0, r, c;
     FILE* fp = fopen("matrix.txt", "r"); // открываем файл
     if(! fp)
         exit(1);
     fscanf(fp, "%2d", &size); // считываем sqrt(размер) матрицы
     fgetc(fp);
     if(! size) {
           fclose(fp);
           exit(2);
      }
      // выделяем динамическую память под матрицу
      int** mat  = new int*[size];
      for(r = 0; r < size; r++)
            mat[r] = new int[size];
 
      char  buf[255];
      char* str;
 
      memset(buf, '\0', sizeof(buf));
      for(r = 0; fgets(buf, sizeof(buf), fp); r++) { // считыаем матрицу из файла
               for(c = 0, str = strtok(buf, " "); str; str = strtok(NULL, " "), c++)
                     mat[r][c] = atoi(str);
      }
      fclose(fp);
 
      int length = 0;
      count_island(mat, size, length);  // подсчитываем острова матрицы
 
     // выводим результат на дисплей и в файл
     fp = fopen("D:\\result.txt", "w+");
     fprintf(fp, "%d", length);
     fclose(fp);
     printf("island count: %d\n", length);
    
     // освобождаем занятую динамическую память
     for(r = 0; r < size; r++) {
            delete[] mat[r];
            mat[r] = NULL;
     }
     delete[] mat;
     mat = NULL;
 
    getchar();
    return 0;
}
 
void is_row(int** mat, int row, int col,  const int size) {
  int r;
  for(r = row + 1; r < size; r++) {
      if(mat[r][col]) {
            is_col(mat, r, col, size);
            mat[r][col] = 0;
      } else
            break;
  } 
  for(r = row - 1; r >= 0; r--) {
      if(mat[r][col]) {
           is_col(mat, r, col, size);
           mat[r][col] = 0;
      } else
          break;
  }
}
 
void is_col(int** mat, int row, int col, const int size) {
  int c;
  for(c = col + 1; c < size; c++) {
       if(mat[row][c]) {
            is_row(mat, row, c, size);
            mat[row][c] = 0;
       } else
            break;
  } 
  for(c = col - 1; c >= 0; c--) {
       if(mat[row][c]) {
           is_row(mat, row, c, size);
           mat[row][c] = 0;
       } else
           break;
  }
}
 
void count_island(int** mat, const int size, int& len) {
    int r, c;
prev:
    for(r = 0; r < size; r++) {
          for(c = 0; c < size; c++) {
               if(mat[r][c]) {
                    is_row(mat, r, c, size);
                    is_col(mat, r, c, size);
                    mat[r][c] = 0;
                    len++;
                    goto prev;
                }
          }
    }
}
Результат: 7 - островов в матрице
Поиск вёлся по такому принципу как показан на картинке ниже.
Изображения
 
 
Текущее время: 13:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru