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

Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон - C++

Восстановить пароль Регистрация
 
Kritik
0 / 0 / 0
Регистрация: 22.07.2014
Сообщений: 5
22.07.2014, 20:48     Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон #1
Помогите, пожалуйста, отредактировать эту программу.
Нужно переписать код, чтобы использовались функции.

Текст задания:
Поле размером mxn заполнено прозрачными и непрозрачными кубиками.
Удалить (сделать прозрачными) все непрозрачные кубики, видимые
хотя бы с одной из четырех сторон. (видимость анализируется до удаления
какого-либо кубика).

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
#include <windows.h>
#include <iostream>
#include <cfloat>
using namespace std;
 
int main() {
    int m,n, k=0,i,j, c=0;
    system("chcp 1251");
    cout<<"Введите количество строк: ";
    cin>>m;
    cout<<"Введите количество столбцов: ";
    cin>>n;
    cout<<"----------------------\n";
    cout<<"Заполните массив A["<<m<<"]["<<n<<"]:\n";
    
   const int r=10000;
    int Q[r];
    double **A = new double *[n];
  for(int i = 0; i < m; i++)
    A[i] = new double[n];
    for (unsigned long int i=0; i<m; i++) {
        for (unsigned long int j=0; j<n; j++) { 
        cout<<"Введите элемент массива ["<<i<<"]["<<j<<"]=";
        cin>>A[i][j]; } 
        }
cout<<"Исходный массив:";
for (unsigned long int i=0; i<m; i++) {
    cout<<"\n";
        for (unsigned long int j=0; j<n; j++) { 
            cout<<A[i][j];
            } }  
 
for (unsigned long int i=0; i<m; i++) {
        for (unsigned long int j=0; j<n; j++) { 
            if (A[i][j]==1) {
                  Q[k]=i;
                    Q[k+1]=j;
                    k=k+2; 
                    break;}}
                    }
for (unsigned long int i=0; i<m; i++) {
        for (unsigned long int j=n; j>0; j--) { 
            if (A[i][j]==1) {
                    Q[k]=i;
                    Q[k+1]=j;
                    k=k+2; 
                    break;}}
                    }               
 
for (unsigned long int j=0; j<n; j++) {
        for (unsigned long int i=0; i<m; i++) { 
            if (A[i][j]==1) {
                    Q[k]=i;
                    Q[k+1]=j;
                    k=k+2; 
                    break;}
                    }} 
for (unsigned long int j=0; j<n; j++) {
        for (unsigned long int i=m-1; i>0; i--) { 
            if (A[i][j]==1) {
                    Q[k]=i;
                    Q[k+1]=j;
                    k=k+2; 
                   break;}
                    }}
for (unsigned long int c=0; c<k; c=c+2)    {
          i=Q[c];
          j=Q[c+1]; 
          A[i][j]=0;}
 
 
cout<<"\nРезультат удаления:";
for (unsigned long int i=0; i<m; i++) {
    cout<<"\n";
        for (unsigned long int j=0; j<n; j++) { 
            cout<<A[i][j];
            } }         
cout<<"\n";                
   for(unsigned long int i = 0; i < m; i++){
delete [] A[i];
}
delete [] A;
system("pause"); 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 20:48     Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Посмотрите здесь:

Удалить все строки, в которых есть хотя бы одна цифра C++
Определить, лежит ли заданная точка на одной из сторон треугольника, заданного координатами своих вершин C++
Строка: Имеются четыре буквы, необходимо удалить из массива все символы, кроме этих четырех и "склеить" оставшееся в непрерывный символьный массив. C++
Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева C++
C++ Матрица C(m;m) состоит из нулей и единиц. Найти в ней номера (индексы) хотя бы одной строки и хотя бы одного столбца
C++ Как сделать чтоб все проверки вызывались одной функцией?
Сделать все задание в одной программе) C++
C++ Удалить из текста все слова, состоящие из одной буквы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
23.07.2014, 14:04     Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон #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
#include <stdlib.h>     // rand
#include <time.h>       // time
#include <stdio.h>      // putchar, puts
 
#define M 10
#define N 30
 
const char symbols[2] = { '*', 'O' };
 
int cubes1[M][N];
int cubes2[M][N];
 
void fill_cubes(unsigned seed)
{
    srand(seed);
    int i, j;
    for( i = 0; i < M; ++i ) {
        for( j = 0; j < N; ++j ) {
            cubes1[i][j] = rand() & 1;
        }
    }
}
 
int visible1(int x, int y, const int dx, const int dy)
{
    while( 1 ) {
        x += dx;
        if( x < 0 || x > M - 1 ) { break; }
        y += dy;
        if( y < 0 || y > N - 1 ) { break; }
        if( cubes1[x][y] ) { return 0; }
    } 
    return 1;
}
 
int visible4(int x, int y)
{
    return visible1(x, y, -1, 0)
        || visible1(x, y, 1, 0)
        || visible1(x, y, 0, -1)
        || visible1(x, y, 0, 1);
}
 
void remove_visible_cubes()
{
    int i, j;
    for( i = 0; i < M; ++i ) {
        for( j = 0; j < N; ++j ) {
            if( cubes1[i][j] ) {
                cubes2[i][j] = !visible4(i, j);
            }
        }
    }
}
 
void print_cubes(int* cubes)
{
    int i, j;
    for( i = 0; i < M; ++i ) {
        for( j = 0; j < N; ++j ) {
            putchar(symbols[*(cubes + j)]);
        }
        putchar('\n');
        cubes += N;
    }
}
 
int main(void)
{
    fill_cubes(time(NULL));
    puts("All cubes:");
    print_cubes(&cubes1[0][0]);
 
    remove_visible_cubes();
    puts("Non-visible cubes:");
    print_cubes(&cubes2[0][0]);
 
    return 0;
}
Yandex
Объявления
23.07.2014, 14:04     Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Ответ Создать тему
Опции темы

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