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

Спираль Улама C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
nik-nak
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 12
09.09.2011, 19:40     Спираль Улама C++ #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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int poisk(int d){
    int e;
    for (e=2;e<d/2;e++){
        if (d%2==0) return 0;
    }
    return 1;
    
 
}
 
void main(){
 int a[50][50],b[2500],p[2500];
 int i,j,m,n;
 int u,v,k,kol,t,x,y,add,dir,f,h;
 int g,r,q;
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 printf("Введите размер матрицы");
 scanf("%d",&n);
 n--;
 m=n*n;
 g=1;
for(i=0;i<=n;i++){
    for(j=0;j<=n;j++){
        a[i][j]=g;
        g++;
    }
}
for(i=0;i<=n;i++){
    for(j=0;j<=n;j++)
        printf("%3d",a[i][j]);
    printf("\n");
}
 
    
 
k=1;
kol=1;
for(i=0;i<=n;i++){
    for(j=0;j<=n;j++){
        b[k]=a[i][j];
        k++;
        kol++;
    }
}
 
printf("\n");
for(i=0;i<=kol-1;i++){
    for(i=0;i<=kol-1;i++){
        if (b[j]<b[j+1]){
            t=b[j];
            b[j]=b[j+1];
        }
    }
}
 
x=0;
y=1;
add=n;
dir=1;
f=1;
 
while(add!=0){
    i=0;
    while (i!=add){
        x=x+dir;
        a[y][x]=b[f];
        f++;
        i++;
    }
    i=0;
    add--;
    while(i!=add){
        y=y+dir;
        a[y][x]=b[f];
        f++;
        i++;
    }
    dir=dir*(-1);
}
 
printf("\n");
for(i=0;i<n;i++){
    for(j=0;j<=n;j++){
        printf("%3d",a[i][j]);
    }
    printf("\n");
}
 
 
q=1;
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
        if (poisk(a[i][j])==1) q++;
}
}
printf("\n");
printf("%d",q);
 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2011, 19:40     Спираль Улама C++
Посмотрите здесь:

Логарифмическая спираль C++
C++ Скатерть Улама - помогите доработать прогу :)
Матрица-спираль C++
C++ Рекурсия c ++ Спираль!
C++ спираль архимеда
C++ Задачка, в c++, спираль архимеда
Спираль Улама C++
Построить гиперболическую спираль C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mycola
22 / 12 / 13
Регистрация: 23.03.2013
Сообщений: 157
01.01.2015, 19:26     Спираль Улама C++ #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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <stdlib.h>
 
 
short poisk(unsigned short d)
{
    register unsigned short i=2;
    for (; i<d/2; i++)
    {
        if (d%2==0)
            return 0;
    }
    return 1;
}
 
 
void Print_Arr(unsigned int** Arr, unsigned short n, unsigned short m)
{
    register unsigned short i=0,j;
 
    for(; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            printf("%3d",Arr[i][j]);
            printf("  ");
        }
        printf("\n\n");
    }
}
 
 
// Заполнить строку или столбец матрицы последовательными числами начиная со start_count.
// a - матрица
// is_row - true - заполнять строку, false - столбец
// col_or_row_num - номер строки или столбца, которые надо заполнить
// begin - начало строки или столбца
// end - конец строки или столбца
// start_count - с какого числа начинаем заполнение
int fill_col_or_row(int** a, short is_row, int col_or_row_num, int begin, int end, int start_count, short n)
{
    if ((start_count > n*n)||(start_count<=0))
        return start_count;
    int counter = start_count;
    end += (begin<end ? +1 : -1);
    int i;
    for(i=begin; i!=end; i+=(begin<end ? +1 : -1))
        if(is_row)
            a[col_or_row_num][i] = counter--;
        else
            a[i][col_or_row_num] = counter--;
    return counter;
}
 
// Заполнить матрицу возрастающими натуральными числами по спирали.
// Рекурсивное решение.
// a - матрица
// sphere - номер "витка" спирали в матрице (считаются от нуля), например:
//      0 0 0 0 0
//      0 1 1 1 0
//      0 1 2 1 0
//      0 1 1 1 0
//      0 0 0 0 0
// start_count - с какого числа начинать спираль
void build_spiral(int** a, int sphere, int start_count, unsigned short n)
{
    start_count = fill_col_or_row(a, 0, sphere, sphere, n-1-sphere, start_count,n);
    start_count = fill_col_or_row(a, 1, n-1-sphere, sphere+1, n-1-sphere, start_count,n);
    start_count = fill_col_or_row(a, 0, n-1-sphere, n-2-sphere, sphere, start_count,n);
    start_count = fill_col_or_row(a, 1, sphere, n-2-sphere, sphere+1, start_count,n);
    if (sphere < n/2) build_spiral(a, sphere+1, start_count,n);
    if(start_count==0)
        return;
}
 
int main()
{
    setlocale(0,"");
    register unsigned short i;
    int n;
    printf("Введите размер матрицы (установиться размер 2*n+1): ");
    scanf("%d",&n);
    n=2*n+1;
 
    int** Arr=(int**)malloc(sizeof(int*)*n);
    for(i=0; i<n; i++)
        Arr[i]=(int*)malloc(sizeof(int)*n);
 
    build_spiral(Arr,0,n*n,n);
    Print_Arr(Arr,n,n);
 
    free(Arr);
    return 0;
}
http://devwiki.beloblotskiy.com/inde...%BB%D0%B8_2008
Yandex
Объявления
01.01.2015, 19:26     Спираль Улама C++
Ответ Создать тему
Опции темы

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