2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
1

Вывести содержимое файла в матрицу по спирали против часовой стрелки

23.12.2014, 23:18. Показов 1206. Ответов 2
Метки нет (Все метки)

необходимо считывать из файла символ и заносить его в матрицу по спирали против часовой стрелки, не совсем понятен алгоритм заполнения как реализовать, перечитала много тем,но не смогла так понять что к чему

Добавлено через 22 часа 27 минут
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
#include <fstream>
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    int i,j;
    char str[4];// ñèìâîëüíûé ìàññèâ  ïðîìåæóòî÷íîãî õðàíåíèÿ ñ÷èòûâàåìîãî èç ôàéëà òåêñòà äëÿ ïîëó÷åíèÿ ðàçìåðíîñòè
    char strg[100];// ñèìâîëüíûé ìàññèâ  ïðîìåæóòî÷íîãî õðàíåíèÿ ñ÷èòûâàåìîãî èç ôàéëà òåêñòà äëÿ ïîëó÷åíèÿ âñåõ ñèìâîëüíûõ ýëåìåíòîâ
    ifstream fin("F:\\cppstudio.txt"); // îòêðûëè ôàéë äëÿ ÷òåíèÿ
    fin.get(str, 4);//ñ÷èòàëè òðè ñèìâîëà èç ôàéëà
    fin.get(strg,26);
    cout << strg << endl;
    int n = atoi(str);//ïðåîáðàçîâàëè ýòè ñèìâîëû ñ ïîìîùüþ ôóíêöèè â  öåëîå ÷èñëî
    cout << n << endl;//íàïå÷àòàëè ýòî ÷èñëî
    //cout << strg << endl;
    char mat[n][n];
    int l=0;
    int k=0;
    for(int i1=0; i1<n; i1++) 
    {
        for(int i2=0; i2<n; i2++) 
        {
            mat[i1][i2] = 0;
        }
    }
    int vert = 0;//øàã ïî âåðòèêàëè 
    int horiz = 1;//øàã ïî ãîðèçîíòàëè
    int x=0, y=0; //òåêóùèå êîîðäèíàòû
    for(int i = 1; i <= n*n; i++) 
    {
        mat[x][y] = strg[l];
        l++;
        if((mat[x+vert][y+horiz] > 0)|| (x+vert == -1)|| (x+vert == n)|| (y+horiz == -1)|| (y+horiz == n)) 
        {
            if((vert==0)&&(horiz==1)) 
            {
                vert = 1;
                horiz = 0;
            } 
            else if((vert==1)&&(horiz==0))
            {
                vert = 0;
                horiz = -1;
            } else if((vert==0)&&(horiz==-1)) 
            {
                vert = -1;
                horiz = 0;
            } 
            else if((vert==-1)&&(horiz==0)) 
            {
                vert = 0;
                horiz = 1;
            }
        }
        x += vert;
        y += horiz;
    }
    for(x=0; x<n; x++) {
        for(y=0; y<n; y++) {
            cout << mat[x][y] << ' ';
        }
        cout << endl;
    }
    fin.close(); // çàêðûâàåì ôàéë
    system("pause");
    return 0;
}
подскажите пожайлуйста как сделать так,чтобы выводилось содержимое файла,начиная не с первой ячейки, а из центра , а в первой ячейке было не начало а конец,то есть ыводить по спирали ,нчиная с центра против часовой стрелки

Добавлено через 26 минут
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
#include <fstream>
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    int i,j;
    char str[4];// ñèìâîëüíûé ìàññèâ  ïðîìåæóòî÷íîãî õðàíåíèÿ ñ÷èòûâàåìîãî èç ôàéëà òåêñòà äëÿ ïîëó÷åíèÿ ðàçìåðíîñòè
    char strg[100];// ñèìâîëüíûé ìàññèâ  ïðîìåæóòî÷íîãî õðàíåíèÿ ñ÷èòûâàåìîãî èç ôàéëà òåêñòà äëÿ ïîëó÷åíèÿ âñåõ ñèìâîëüíûõ ýëåìåíòîâ
    ifstream fin("F:\\cppstudio.txt"); // îòêðûëè ôàéë äëÿ ÷òåíèÿ
    fin.get(str, 4);//ñ÷èòàëè òðè ñèìâîëà èç ôàéëà
    fin.get(strg,26);
    cout << strg << endl;
    int n = atoi(str);//ïðåîáðàçîâàëè ýòè ñèìâîëû ñ ïîìîùüþ ôóíêöèè â  öåëîå ÷èñëî
    cout << n << endl;//íàïå÷àòàëè ýòî ÷èñëî
    //cout << strg << endl;
    char mat[n][n];
    int l=0;
    int k=0;
    for(int i1=0; i1<n; i1++) 
    {
       for(int i2=0; i2<n; i2++) 
        {
            mat[i1][i2] = 0;
        }
    }
    int vert = 0;//øàã ïî âåðòèêàëè 
    int horiz = -1;//øàã ïî ãîðèçîíòàëè
    int x=0,y=0;
    //int x=n/2, y=(n+1)/3; //òåêóùèå êîîðäèíàòû
    for(int i = 1; i <= n*n; i++) 
    {
    
        mat[x][y] = strg[l];
        l++;
        if((mat[x+vert][y+horiz] !=0)|| (x+vert ==- 1)|| (x+vert == n)|| (y+horiz == -1)|| (y+horiz == n)) 
        {
            if((vert==0)&&(horiz==-1)) 
            {
                vert = 1;
                horiz = 0;
            } 
            else 
            if((vert==1)&&(horiz==0))
            {
                vert = 0;
                horiz = 1;
            } else 
            if((vert==0)&&(horiz==1)) 
            {
                vert = -1;
                horiz = 0;
            } 
            else 
            if((vert==-1)&&(horiz==0)) 
            {
                vert = 0;
                horiz = -1;
            }
        }
        x += vert;
        y += horiz;
    }
    for(x=0; x<n; x++) {
        for(y=0; y<n; y++) {
            cout << mat[x][y] << ' ';
        }
        cout << endl;
    }
    fin.close(); // çàêðûâàåì ôàéë
    system("pause");
    return 0;
}
вот сделала против часовой стрелки вывод,но теперь мне надо чтобы начиналось заполнение от центра (подскажите что нужно изменить)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2014, 23:18
Ответы с готовыми решениями:

Заполнить матрицу по спирали против часовой стрелки
помогите поменять циклы в коде и сделать такую спираль: 1 32 31 30 29 28 27 26 25 2 33 56 55 54...

Записать текст матрицы от ее центра по спирали против часовой стрелки
Задача записать текст квадратной матрицы размера n(n-нечетное) от центра матрицы по спирали против...

Заполнить матрицу по спирали против часовой стрелки
Ребят,помогите пожалуйста. Нужно заполнить матрицу числами по спирали против часовой стрелки....

Заполнить матрицу множеством натуральных чисел по спирали против часовой стрелки
заполнить матрицу NxN множество натуральных чисел по спирали против часовой стрелке по VBA

2
Заблокирован
24.12.2014, 01:44 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
template<int size>void fillMatrix(int(*const & matrix)[size],const int& index,int x,int y,const int& step,int &i){
 
    if((x==size/2)&&(y==((size%2==0)?size/2-1:size/2))){//center
        matrix[x][y]=i++;
        return;
    }
    switch (index) {
    case 0:
        fillMatrix<size>(matrix,(y+2==size-step)?1:0,x,y+1,step,i);
        break;
    case 1:
        fillMatrix<size>(matrix,(x+2==size-step)?2:1,x+1,y,step,i);
        break;
    case 2:
        fillMatrix<size>(matrix,(y==step+1)?3:2,x,y-1,(y==step+1)?step+1:step,i);
        break;
    case 3:
        fillMatrix<size>(matrix,(x==step+1)?0:3,x-1,y,step,i);
        break;
    }
    matrix[x][y]=i++;
}
 
int main()
{
    //filling of matrix on a spiral anticlockwise
    const int size=6;
    int M[size][size];
 
    //work
    int value=0;//fill value increment
    fillMatrix<size>(M,0,0,0,0,value);
 
    //out array
    for(int i=0;i<size;i++){
        for(int j=0;j<size;j++)cout<<M[i][j]<<((M[i][j]>9)?" ":"  ");
        cout<<endl;
    }
    return 0;
}
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
24.12.2014, 21:04  [ТС] 3
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
#include <fstream>
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    int i,j;
    char str[4];// символьный массив  промежуточного хранения считываемого из файла текста для получения размерности
    char strg[100];// символьный массив  промежуточного хранения считываемого из файла текста для получения всех символьных элементов
    ifstream fin("F:\\cppstudio.txt"); // открыли файл для чтения
    fin.get(str, 4);//считали три символа из файла
    fin.get(strg,26);
    cout << strg << endl;
    int n = atoi(str);//преобразовали эти символы с помощью функции в  целое число
    cout << n << endl;//напечатали это число
    //cout << strg << endl;
    char mat[n][n];
    int l=0;
    int k=0;
    for(int i1=0; i1<n; i1++) 
    {
       for(int i2=0; i2<n; i2++) 
        {
            mat[i1][i2] = 0;
        }
    }
    int vert = 0;//шаг по вертикали 
    int horiz = -1;//шаг по горизонтали
    int x=0,y=0;
    //int x=n/2, y=(n+1)/3; //текущие координаты
    for(int i = 1; i <= n*n; i++) 
    {
    
        mat[x][y] = strg[l];
        l++;
        if((mat[x+vert][y+horiz] !=0)|| (x+vert ==- 1)|| (x+vert == n)|| (y+horiz == -1)|| (y+horiz == n)) //???????????
        {
            if((vert==0)&&(horiz==-1)) 
            {
                vert = 1;
                horiz = 0;
            } 
            else 
            if((vert==1)&&(horiz==0))
            {
                vert = 0;
                horiz = 1;
            } else 
            if((vert==0)&&(horiz==1)) 
            {
                vert = -1;
                horiz = 0;
            } 
            else 
            if((vert==-1)&&(horiz==0)) 
            {
                vert = 0;
                horiz = -1;
            }
        }
        x += vert;
        y += horiz;
    }
    for(x=0; x<n; x++) {
        for(y=0; y<n; y++) {
            cout << mat[x][y] << ' ';
        }
        cout << endl;
    }
    fin.close(); // закрываем файл
    system("pause");
    return 0;
}
а как вот условие это переделать,чтобы с центра начиналось,не знаете?

Добавлено через 56 минут
а как можно это сделать с помощью цикла for?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2014, 21:04
Помогаю со студенческими работами здесь

Массив: Заполнить квадратную матрицу порядка n, записывая элементы в нее по спирали против часовой стрелки
Составить программу которая заполняет квадратную матрицу порядка n натуральными числами...

Заполнить матрицу по спирали, начинающейся в левом верхнем углу, против часовой стрелки (+ блок схема)
Матрицу m x n заполнить натуральными числами от 1 до mn по спирали, начинающейся в левом верхнем...

Перемещаясь против часовой стрелки, вывести все элементы матрицы по спирали
Matrix16. Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A1,1 и...

Паскаль, графика. Движущийся шар по спирали по часовой и против часовой стрелки
Здравствуйте, простые пользователи просторов интернета и продвинутые магистры паскаля :) Огромная...

Начиная с первого элемента и перемещаясь против часовой стрелки, вывести все элементы матрицы по спирали
Дана квадратная матрица A порядка M (M — нечетное число). Начиная с первого элемента и перемещаясь...

Матрица по спирали против часовой стрелки
Здравствуйте. Имеется программа заполнения матрицы по спирали начиная с верхнего левого угла по...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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