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

рекурсивная матрица - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ решение системы линейных уравнений методом Грама - Шмидта http://www.cyberforum.ru/cpp-beginners/thread38366.html
Может быть у кого то есть такое? Или кто знает литературу где описана эта задача на С++
C++ Дерево Хаффмана Всем доброго времени суток! Очень прошу мне помочь! Мне нужно написать программу на delphi, которая строит дерево Хаффмана. Может быть, кто-то писал аналагичные программы. Пожалуйста, помогите. Я с ним уже замучалась! :'( Заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread38356.html
C++ Похоже на постраничный вывод.
Мне нужно написать функцию, чтобы если содержимое файла содержит больше строк, чем экран, выдавать те, что влазят строчки, и по нажатию любой клавиши - еще серию на весь экран? Как это возможно? Вот у меня функция, которая выводит содержимое файла на экран: int txt2() { char s; int i, count,n=0; FILE *fin, *fout,*f;
C++ Реализация двусвзного списка на основе односвязного списка
очень прошу вашей помощи, поскольку сама не могу это сделать, точнее плохо представляю как это можно реализовать... предмет структуры и алгоритмы обработки данных....необходимо написать класс который будет использовать односвязный список но выполнять функции списка двусвязного. подобную задачу на основе массива я реализовала, а вот что со списком делать... ума не приложу... привязать к списку...
C++ Кто может помочь с изучением С++ http://www.cyberforum.ru/cpp-beginners/thread38342.html
люди кто может помочь с освоением языка в icq 437551173
C++ С++ классы, стек Мне нужно создать класс который реализует стек. И определить методы включения и исключение элемента в стек и со стека. Объясните мне пожалуйста как это сделать. Направьте в нужном направлении) P.S.: С++ изучать только начал... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17469 / 5707 / 362
Регистрация: 30.03.2009
Сообщений: 15,669
Записей в блоге: 26
05.06.2009, 14:01     рекурсивная матрица
Не в моих правилах писать студентам готовые коды, но тут не удержался - уж больно задача хорошая.

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
#include <stdio.h>
#include <stdlib.h>
 
/* Лениво делать динамический массив, сделаем статический.
 * Матрица A5 получается очень большой, так что оставим максимум для 4 */
char a[81][81];
 
/* Внутренний контроль */
#if 1
#define ASSERT(expr) \
  if (!(expr)) abort();
#else
#define ASSERT(expr)
#endif
 
/* Вычисление 3^n */
static int
pow3 (int n)
{
  int res = 1;
 
  while ((n--) != 0)
    res *= 3;
 
  return res;
}
 
/* Построение локальной матрицы A<range> в общем массиве начиная
 * с поля x, y. Построение НЕ является полностью честным, т.к.
 * мы строим только заполнение единичками (предполагая, что
 * общий массив уже заполнен нулями). Сейчас просто лениво писать
 * заполнение нулями. Из-за этого для построения новой матрицы
 * надо либо принудительно обнулять массив, либо запускать программу
 * заново */
static void
build_A (int range, int x, int y)
{
  int size;
 
  ASSERT (range >=0 && range <= 4);
 
  /* Матрица нулевого порядка состоит из единственной единицы */
  if (range == 0)
    {
      a[x][y] = 1;
      return;
    }
 
  /* Размер матрицы порядка range-1 */
  size = pow3 (range - 1);
 
  /* Матрица A<n> состоит из пяти матриц A<n-1> */
  build_A (range - 1, x, y);
  build_A (range - 1, x + size * 2, y);
  build_A (range - 1, x + size, y + size);
  build_A (range - 1, x, y + size * 2);
  build_A (range - 1, x + size * 2, y + size * 2);
}
 
/* Печать матрицы */
static void
print_A (int range)
{
  int size, i, j;
 
  size = pow3 (range);
 
  for (j = 0; j < size; j++)
    {
      for (i = 0; i < size; i++)
        printf ("%d", (int)a[i][j]);
      printf ("\n");
    }
}
 
int
main (void)
{
  int range;
 
  range = 4;
  build_A (range, 0, 0);
  print_A (range);
 
  return 0;
}
Добавлено через 8 минут 31 секунду
Для наглядности можно поправить процедуру печати - так будет красивше смотреться

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void
print_A (int range)
{
  int size, i, j;
  char c[2] = { ' ', '*' };
 
  size = pow3 (range);
 
  for (j = 0; j < size; j++)
    {
      for (i = 0; i < size; i++)
        printf ("%c", c[(int)a[i][j]]);
      printf ("\n");
    }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru