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

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

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

Рекурсия c ++ Спираль! - C++

25.10.2011, 20:26. Просмотров 1178. Ответов 6
Метки нет (Все метки)

Здравствуйте! Помогите решить задачу! Используя рекурсию....

[img]http://s003.***********/i202/1110/9f/cbca2e936243.jpg[/img]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6228 / 3473 / 425
Регистрация: 29.11.2010
Сообщений: 9,178
25.10.2011, 20:42     Рекурсия c ++ Спираль! #2
Делал это спустя 2 недели изучения языка С++, поэтому за качество не отвечаю. Код просто скопировал)
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
//Ïîëó÷èòü öåëî÷èñëåГ*Г*ГіГѕ ГЄГўГ*äðГ*ГІГ*ГіГѕ Г¬Г*òðèöó Г°Г*çìåðГ*îñòüþ NГµN, 
//ýëåìåГ*ГІГ*ìè êîòîðîé ÿâëÿþòñÿ Г·ГЁГ±Г«Г* 1, 2, … N^2, 
//Г°Г*ñïîëîæåГ*Г*ûå Гў Г¬Г*òðèöå ГЇГ® Г±ГЇГЁГ°Г*ëè.
#include<iostream>
#include<conio.h>
#include<clocale>
#include<iomanip>
#include<math.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int m[100][100],x=0,y=0,n=1,N,N1,i=1,j=1,nach=1,qwerty;
    cout<<"Ââåäèòå N: ";
    cin>>N;
    N1=N;
    // ГЁГ*èöèГ*ëèçГ*öèÿ
    if(N==1) // åñëè Г°Г*çìåð Г¬Г*òðèöû 1 - âûâåñòè ГҐГЈГ® (ГЁГ*Г*Г·ГҐ N=0)
    cout<<N;
    else {   
    for(;N>1;N--,nach++)
    {
                        if(m[x][y]==0){ // öåГ*ГІГ° (ГґГЁГЄГ± ГЎГ*ГЈГ* Г± 0)
                        m[x][y]=n;
                        }
                        if(x==nach-1&&y==nach-1) // äâèæåìñÿ ------------>>>>>
                        {
                        for(i=nach,x=nach,y=nach;i<N;i++)
                        {
                        m[x][y]=n;
                        x++;
                        n++;
                        }
                  }           
            if(x==N&&y==nach) // äâèæåìñÿ ГўГ*ГЁГ§
            {
                    for(j=nach;j<N;j++)
                    {
                    m[x][y]=n;
                    y++;
                    n++;                
                    }
            }
            if(x==N&&y==N) // äâèæåìñÿ <<<<---------------
            {
                          for(i=N;i>nach;i--)
                          {
                          m[x][y]=n;
                          x--;
                          n++;
                          }
            }
            if(x==nach&&y==N) // äâèæåìñÿ ââåðõ, Г*ГҐ äîõîäÿ ГЇГ® y 1, 
            {                 // Г¤Г*ГЎГ» Г*ГҐ ïðèéòè Гў ïðîøëóþ òî÷êó
                    for(j=N;j>nach;j--)
                    {
                    m[x][y]=n;
                    y--;
                    n++;
                   }
            } 
    }
    if(n<=99&&n>=9) // ÷òîáû áûëî ГЄГ°Г*Г±ГЁГўГ® (setw)
    qwerty=2;
    else if(n>=99) 
    qwerty=3;
    
    for(x=1,y=1;y<=N1;x++){ // âûâîä Г*Г* ГЅГЄГ°Г*Г*
    cout<<setw(qwerty)<<m[x][y]<<" ";
    if(x==N1){
              cout<<endl;
              x=0;
              y++;
              }
        }
    }
    getch();
    return 0;
}
kazseo
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 13
25.10.2011, 20:48  [ТС]     Рекурсия c ++ Спираль! #3
через какую книгу учили чтобы так быстро научиться кодить посоветуйте!
Navern
4 / 4 / 0
Регистрация: 01.10.2011
Сообщений: 33
25.10.2011, 20:52     Рекурсия c ++ Спираль! #4
Цитата Сообщение от kazseo Посмотреть сообщение
через какую книгу учили чтобы так быстро научиться кодить посоветуйте!
Я предполагаю, что человек уже до этого учил какой-то язык. А может и не один. Тогда по аналогии новый язык гораздо быстрее учится. Особенно если не затрагивать как таковую реализацию ООП.

Кстати его вариант ни разу не рекурсивный, что является условием задачи.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6228 / 3473 / 425
Регистрация: 29.11.2010
Сообщений: 9,178
25.10.2011, 20:58     Рекурсия c ++ Спираль! #5
Цитата Сообщение от Navern Посмотреть сообщение
Я предполагаю, что человек уже до этого учил какой-то язык. А может и не один. Тогда по аналогии новый язык гораздо быстрее учится. Особенно если не затрагивать как таковую реализацию ООП.

Кстати его вариант ни разу не рекурсивный, что является условием задачи.
Языков программирования я до этого не проходил. Просто когда появилась возможность изучать, стал посвещать этому все свое время.
Да, вы правы, мой вариант к сожалению не рекурсивный, я не до конца прочитал условие.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.10.2011, 00:03     Рекурсия c ++ Спираль! #6
с рекурсией
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
#include <stdio.h>
#include <stdlib.h>
 
void recursive(int **arr, int order,
    int pos, int val);
 
int main()
{
    int **arr, order = 1;
    int i, j;
 
    while (printf("\nenter an order or 0 to exit: ") && scanf("%d", &order)
            && order > 0) 
    {
        arr = (int **) malloc(order * sizeof(int *));
        for (i = 0; i < order; i++)
            arr[i] = (int *) malloc(order * sizeof(int));
 
        recursive(arr, order, 0, 1);
 
        putchar('\n');
        for (i = 0; i < order; i++) {
            for (j = 0; j < order; j++)
                printf("%3d", arr[i][j]);
            putchar('\n');
            free(arr[i]);
        }
        free(arr);
    }
    return 0;
}
 
void recursive(int **arr, int ord, int pos, int val)
{
    int i, j;
 
    if (pos < ord / 2 + (ord & 1 ? 1 : 0)) {
        for (j = pos; j < ord - pos; j++) 
            arr[pos][j] = val++;
        j -= 2;
        for (i = pos + 1; i < ord - pos; i++)
            arr[i][ord - pos - 1] = val++;
        i--;
        for ( ; j >= pos; j--)
            arr[i][j] = val++;
        j++;
        for (i--; i >= pos + 1; i--)
            arr[i][j] = val++;
        recursive(arr, ord, pos + 1, val);
    } 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 00:16     Рекурсия c ++ Спираль!
Еще ссылки по теме:

C++ Задачка, в c++, спираль архимеда
Спираль Улама C++
Построить гиперболическую спираль C++
Развернуть матрицу, как спираль, в линейный массив C++
C++ Прототип графического редактора, как переделать спираль с переменным шагом

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

Или воспользуйтесь поиском по форуму:
Revol'veR
 Аватар для Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
26.10.2011, 00:16     Рекурсия c ++ Спираль! #7
Цитата Сообщение от kazseo Посмотреть сообщение
через какую книгу учили чтобы так быстро научиться кодить посоветуйте!
Тут не только книги, но и опыт нужен
Yandex
Объявления
26.10.2011, 00:16     Рекурсия c ++ Спираль!
Ответ Создать тему
Опции темы

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