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

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

Войти
Регистрация
Восстановить пароль
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

найти нулевые элементы на краях таблицы - C++

22.02.2013, 16:54. Просмотров 315. Ответов 5
Метки нет (Все метки)

есть двумерный массив
a.v[i][j]
из нулей и единиц
надо найти координаты двух точек
т.е. нулевые элементы на краях массива(первая, последняя строчка, первый, последний столбец)
а записать координаты в Coord
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
void Start(Matrix& a)
{
    Coord in;
    Coord out;
    do
    {
        for(int i=0; i<a.ocount; i++) //первая строка
            if(a.v[i][0]==0) {in.x=i; in.y=0; in.enabled=true;}
 
        for(int j=0; j<a.ocount; j++) // первый столбец
            if(a.v[0][j]==0) {in.x=0; in.y=j; in.enabled=true;}
 
        for(int i=0; i<a.ocount; i++) // последняя строка
            if(a.v[i][a.scount-1]==0) {in.x=i; in.y=a.scount-1; in.enabled=true;}
 
        for(int j=0; j<a.ocount; j++) //последний столбец
            if(a.v[j][a.ocount]==0) {in.x=j; in.y=a.ocount; in.enabled=true;}
    }
    while(in.enabled==false);
    a.v[in.x][in.y]=2;
    do
    {
        for(int i=0; i<a.ocount; i++) //первая строка
            if(a.v[i][0]==0) {out.x=i; out.y=0; out.enabled=true;}
 
        for(int j=0; j<a.ocount; j++) // первый столбец
            if(a.v[0][j]==0) {out.x=0; out.y=j; out.enabled=true;}
 
        for(int i=0; i<a.ocount; i++) // последняя строка
            if(a.v[i][a.scount-1]==0) {out.x=i; out.y=a.scount-1; out.enabled=true;}
 
        for(int j=0; j<a.ocount; j++) //последний столбец
            if(a.v[j][a.ocount]==0) {out.x=j; out.y=a.ocount; out.enabled=true;}
        
    }
    while(out.enabled==false);
    cout<<"in x="<<in.x<<"\ty="<<in.y<<endl;
    cout<<"out x="<<out.x<<"\ty="<<out.y<<endl;
 
}
но из 2ого цикла никогда не выходит. почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 16:54     найти нулевые элементы на краях таблицы
Посмотрите здесь:

Даны таблицы А[1..n] ,В[1..m]. Построить таблицу С в которой сначала размещаются все элементы А, затем все элементы таблицы В C++
C++ Нулевые элементы в начало
Найти количество строк матрицы, содержащих нулевые элементы C++
Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора C++
Одномерный массив. Найти наименьший элемент, все нулевые элементы заменить значением этого элемента C++
C++ Нулевые элементы
C++ Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
Найти строчку и столбец матрицы, где есть нулевые элементы C++
Найти и вывести на печать все нулевые элементы матрицы и указать в каких строках и столбцах они находятся C++
C++ Написать функцию, которая в одномерном массиве заменяет элементы кратные некоторому числу на нулевые элементы
C++ В массиве найти максимальный элемент и заменить им все нулевые элементы, с вызовом функции
Найти первый и последний нулевые элементы заданного массива и вывести их индексы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.02.2013, 17:10     найти нулевые элементы на краях таблицы #2
а зачем циклы?)

Добавлено через 5 минут
видимо у тебя только такая одна координата которую ты после 1го цикла заменяешь на ненулевую
Цитата Сообщение от Tiva Посмотреть сообщение
C++
1
a.v[in.x][in.y]=2;
Добавлено через 2 минуты
Цитата Сообщение от Tiva Посмотреть сообщение
надо найти координаты двух точек
т.е. нулевые элементы на краях массива(первая, последняя строчка, первый, последний столбец)
если честно пока что не вижу связи, требования с написанной программой будь добр напиши поподробнее))
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
22.02.2013, 17:18  [ТС]     найти нулевые элементы на краях таблицы #3
в массиве только 0 и 1
функция Start находит первый нулевой элемент в массиве(первый do-while)
потом заменяет его на 2 (чтоб второй такой элемент на краях был другим, а не опять тем же самым)
и опять do-while проходит по массиву, в поиске нуля на краю

т.е. если есть вот такой массив
1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
1 0 0 0 1 1 0 0 0 1
1 1 1 0 0 0 0 1 0 1
1 1 1 1 1 1 1 0 0 1
1 1 1 1 1 1 1 0 1 1
1 1 0 0 0 0 0 0 1 1
1 1 0 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 0 1
то в in записались координаты 0:1, а в out 8:9

Добавлено через 1 минуту
Coord выглядит вот так
C++
1
2
3
4
5
6
struct Coord
{
    int x,y;
    bool enabled;
    Coord(){x=0;y=0; enabled=false;}
};
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.02.2013, 17:26     найти нулевые элементы на краях таблицы #4
Цитата Сообщение от Tiva Посмотреть сообщение
C++
1
2
for(int j=0; j<a.ocount; j++) //последний столбец 
if(a.v[j][a.ocount]==0) {in.x=j; in.y=a.ocount; in.enabled=true;}
а не
C++
1
2
for(int j=0; j<a.ocount; j++) //последний столбец 
if(a.v[a.ocount-1][j]==0) {in.x=j; in.y=a.ocount; in.enabled=true;}
Добавлено через 1 минуту
C++
1
2
        for(int j=0; j<a.ocount; j++) // первый столбец
            if(a.v[0][j]==0) {in.x=0; in.y=j; in.enabled=true;}
а ты уверен что это первый столбец?) может это все таки первая строка?

Добавлено через 3 минуты
насчет конструкции do - while, а если вдруг у тебя будет матрица (может попасть случайно) в которой крайние элементы = 1, то что тогда? финкция повиснет?, помоему do - while Тут совершенно не нужен, а можешь просто проверив
C++
1
if(in.enabled==true;)
вывести какое нибудь сообщение
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
22.02.2013, 17:40  [ТС]     найти нулевые элементы на краях таблицы #5
Цитата Сообщение от aLarman Посмотреть сообщение
а ты уверен что это первый столбец?) может это все таки первая строка?
не уверен, т.к. постоянно путаю, за что отвечает первый индекс, а за что второй индекс....
v[i][j]
первый индекс это вправо отсчитывать(столбцы)
правый индекс вниз считать(строки)
вот реально путаю
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.02.2013, 17:52     найти нулевые элементы на краях таблицы #6
первый номер строки, второй номер столбца, v[i][0] первый столбец, v[0][i] первая строка
Yandex
Объявления
22.02.2013, 17:52     найти нулевые элементы на краях таблицы
Ответ Создать тему
Опции темы

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