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

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

Войти
Регистрация
Восстановить пароль
 
Niconov
Сообщений: n/a
#1

Задача на С++ - C++

15.11.2011, 20:56. Просмотров 350. Ответов 1
Метки нет (Все метки)

Добрый день! Прошу помощи в такой задаче:
Пользователь вводит размер таблицы (sizeX sizeY) и начальную боковую ячейку (startX startY), с которой нужно начинать действия.
Согласно этим условиям требуется заполнить данную таблицу по спирали (по часовой стрелке) начиная со стартовой ячейки. Каждая из ячеек таблицы должна быть заполнена.
Вот примеры таких таблиц:
Код
таблица 7х5, начало startX=2, startY=1.

21 1  2  3  4  5  6
20 22 23 24 25 26 7
19 33 34 35 36 27 8
18 32 31 30 29 28 9
17 15 14 13 12 11 10
вот два экземпляра моего кода (1ый будет "чистовиком", 2ой - тестовый, который нужно подредактировать).

Итак 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
#pragma hdrstop
#pragma argsused
 
#include <iostream.h>
#include <conio.h>
 
int sizeX;
int sizeY;
int startX;
int startY;
int n =1;
int x;
int y;
int st = 0;//текущая  сторона
int size;
void enter()
{
    cout << "vvedite max x & y \n";
    cin >> sizeX;
    cin >> sizeY;
    cout << "vvedite start X & Y\n";
    cin >> startX;
    cin >> startY;
    size = sizeX*sizeY;
}
 
void print(int **Mas)
{
    for (y=0; y < sizeY; y++)
    {
        for (x = 0; x < sizeX; x++) {
            cout << " " << Mas[y][x];
                if (x == sizeX-1) {
                    cout << "\n";
                }
        }
    }
}
 
#pragma argsused;
void main(int argc, _TCHAR* argv[])
{
enter();
cout << "vvedenni razmery" <<  sizeX << "x" << sizeY << " nachalo: x=" << startX << "y=" << startY << "\n";
 
int **Mas = new int*[sizeY];
 
    for ( int i = 0; i < sizeY; i++ ) Mas[i] = new int[sizeX];
    for ( int y = 0; y < sizeY; y++ ) {
        for ( int x = 0; x < sizeX; x++ ) Mas[y][x] = 0;}
 
 
while (n == size){
    if (startX==1 && !(startY==1)) {
    //выполнение движения вверх
        for (x = startX; x < sizeX+1; x++) {
 
        }
    }
    if (!(startX==1) && startY==sizeY) {
    //движение влево
    }
    if (startX==sizeX && !(startY==sizeY)) {
    //движение вниз
    }
    if(!(startX==sizeX) && startY=1) {
    //движение влево
    }
 
}//кц
 
 
 
print(Mas);
getch();
}
И вот второй, для редактирования:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream.h>
 
using namespace std;
 
      int sizeX;
      int sizeY;
      int startX;
      int startY;
      int napr;
      int summ;
      int x;
      int y;
      int n = 1;
      int m = 0;
      int **mass = new int*[sizeX];
      int **mass_p = new int*[sizeX];
      int nX = 0; //корректировка
      int nY = 0; //корректировка
      int tX;
      int tY;
 
void vpravo(int n, int **mass){
y=startX;
    for (x=startX; x < sizeX ; x++) {
        mass[x][y] = n;
        n++;
        nY++;
    }
       /* спорно    startX=sizeX-1;
        startY=sizeY-1; */
 
}
 
void vniz(int n, int **mass){
x=startX;
    for (y=0; y == sizeY; y++) {
        mass[x][y] = n;
        n++;
        }
}
 
void vlevo(int n, int **mass){
y=startY;
    for (x=sizeX-1; x == 0; x--) {
        mass[x][y] = n;
        n++;
    }
}
 
void vverh(int n, int **mass){
y=startY;
    for (y=sizeY-1; y == 0;  y--) {
        mass[x][y] = n;
        n++;
        tX = 1;
        tY = 1;
    }
}
 
void print()
{
  for ( y = 0; y < sizeY; y++ )
  {
    for ( x = 0; x < sizeX; x++ )
    {
      if ( mass[y][x] < 10 ) cout << "" << mass[y][x] << "   ";
      else
         if ( 10 < mass[y][x] && mass[y][x] <= 100 ) cout << "" << mass[y][x] << "  ";
         else if ( 100 < mass[y][x] && mass[y][x] <= 1000 ) cout << "" << mass[y][x] << " ";
         else cout << mass[y][x] << "";
    }
    cout << endl;
  }
}
 
int main ()
{
    cout <<"Hello! Enter size of table X*Y \n";
    cin >> sizeX;
    cin >> sizeY;
    cout <<"Enter start position on border: \n X: ";
    cin >> startX;
    cout <<"\n Y: ";
    cin >> startY;
    cout << "\nSize table:" << sizeX << "x" << sizeY << "\n";
     {
        if (!(startX == 1 ||  startY == 1 ||  startX ==  sizeX ||  startY ==  sizeY))
            {cout << "No border sector"; cin>> ""; return 0; }
     };
 
     tX=startX;
     tY=startY;
     for ( int i = 0; i < sizeY; i++ ) mass[i] = new int[sizeY];
     for (x=0; x < sizeX; x++) {
        for (y=0; y < sizeY; y++) {
            mass[x][y] = 0;
        }
     }
    cout << "\n";
 
 
  while (n == summ){
 
 
 
                if (tX==1 && !(tY==1)) { //движение вверх
                    cout << "1";
                    vverh(n, mass);
                    break;
                    }else{
                                if (!(tX==1) && tY==sizeY) {//движение влево
                                vlevo(n, mass);
                                cout <<"2";
                                break;
                                    } else {
                                            if (tY==1 && !(tX==sizeX)  ) { //движение вправо
                                                vpravo(n, mass);
                                                cout << "3";
                                                break;
                                                } else { if (tX==sizeX && tY==1) { //движение вниз
                                                        cout << "4";
                                                        vniz(n, mass);
                                                        break;
                                                        }
                                                        }
                                                }
 
 
                 }                              }
 
    print();
 
 
cin >>"";
return 0 ;
};
и вот еще работающая программа, но заполняет только с первой ячейки, ссылка на архив программы+исходников

Прошу помощи по выполнению этой задачи! Помогите кто чем может с алгоритмом заполнения...

//Извините за мой французский, но Си++ я изучил в ускоренных темпах за 6 дней как смог, поэтому с радостью послушаю комментарии по коду
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 20:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача на С++ (C++):

Задача: В некотором государстве ввели компьютерный паспорт гражданина.(задача) - Pascal
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных голов. Задача: В некотором...

Задача на k-тую цифру последовательности, задача на схему Горнера. - Pascal
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности 1234567891011121314…, в которой выписаны подряд...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника - PascalABC.NET
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка по...

Первая смешанная задача для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье - Дифференциальные уравнения
Решить первую смешанную задачу для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье ...

Задача о размещении весов по ящикам (задача о рюкзаках) - Delphi
Есть упорядоченный по невозрастанию набор весов предметов w1..wn, которые необходимо распределить по ящикам способным выдержать вес V,...

Задача линейного программирования, транспортная задача - Методы оптимизации
Всем привет. сижу на экзамене, помогите пожалуйста решить,сроно!!! заранее спасибо.

1
Байт
Эксперт C
16320 / 10596 / 1586
Регистрация: 24.12.2010
Сообщений: 20,206
15.11.2011, 21:15 #2
Niconov, наивный человек! Неужели вы думаете, что кто-то это будет читать? Да еще при этом оформлении...
Хотя, может быть я и не прав.

Не по теме:

Уже давным давно замечено,
Что некрасив в скафандре водолаз.
Но без сомненья - есть на свете женщина,
Которая такому б отдалась.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 21:15
Привет! Вот еще темы с ответами:

Задача Дам или задача Восьми - Алгоритмы
помогите найти ошибку в алгоритме. не находит ответ подозреваю ошибку в k, i, j package com.company; import java.util.Arrays;...

Задача на файл и задача на создание очереди - Pascal
1 Дан символьный файл, содержащий, по крайней мере, один символ пробела. Удалить из файла все символы, предшествующие пробелу 2 ...

задача Коши и краевая задача - Matlab
Помогите кто чем может))

Задача работы с массивом и задача работы с формой - C#
Помогите пожалуйста. Никак не могу разобраться с решением 2х задач: 1. Напишите приложение, которое в заголовке формы выводит ее...


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

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

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