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

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

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

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

22.02.2013, 16:54. Просмотров 322. Ответов 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ого цикла никогда не выходит. почему?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 16:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос найти нулевые элементы на краях таблицы (C++):

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора - C++
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые...

Найти количество строк матрицы, содержащих нулевые элементы - C++
В общем написал такую вот программу но есть проблемка-http://i037.***********/1210/47/d753a3df6509.jpg,не могу понять в чем дело,пожалуйста...

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

Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора - C++
Заданный вектор Т, который состоит из n действительных чисел. Заменить первых 2 нулевые элементы заданного вектора соответственно на первых...

Найти первый и последний нулевые элементы заданного массива и вывести их индексы - C++
В массиве несколько нулевых элементов. Найти первый и последний нулевые элементы. Вывести их индексы. Как это сделать?

В массиве найти максимальный элемент и заменить им все нулевые элементы, с вызовом функции - C++
#include &lt;iostream&gt; using namespace std; void Zamena(double a, int n, double max) { for (int i = 0; i &lt; n; i++) if (a &gt;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 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 Посмотреть сообщение
надо найти координаты двух точек
т.е. нулевые элементы на краях массива(первая, последняя строчка, первый, последний столбец)
если честно пока что не вижу связи, требования с написанной программой будь добр напиши поподробнее))
0
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;}
};
0
aLarman
642 / 563 / 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;)
вывести какое нибудь сообщение
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
22.02.2013, 17:40  [ТС] #5
Цитата Сообщение от aLarman Посмотреть сообщение
а ты уверен что это первый столбец?) может это все таки первая строка?
не уверен, т.к. постоянно путаю, за что отвечает первый индекс, а за что второй индекс....
v[i][j]
первый индекс это вправо отсчитывать(столбцы)
правый индекс вниз считать(строки)
вот реально путаю
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.02.2013, 17:52 #6
первый номер строки, второй номер столбца, v[i][0] первый столбец, v[0][i] первая строка
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 17:52
Привет! Вот еще темы с ответами:

Одномерный массив. Найти наименьший элемент, все нулевые элементы заменить значением этого элемента - C++
Ребят,помогите,пожалуйста, с массивом,вот задание: В массиве найти наименьший элемент.Вывести на дисплей полученное значение.После...

Найти и вывести на печать все нулевые элементы матрицы и указать в каких строках и столбцах они находятся - C++
Парни, помогите с этим заданием.. &quot;Написать программу, задающую матрицу А размером 4x4 с вещественными элементами, вводимыми с клавиатуры...

Написать функцию, которая в одномерном массиве заменяет элементы кратные некоторому числу на нулевые элементы - C++
Знатоки, помогите написать программы по информатике. У меня полный завал по этой теме, а через неделю уже экзамен :( Надеюсь на вашу...

Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы - C++
Написать программу , которая вводит с клавиатуры массив из N вещественных чисел , создает два новых массива , в один из которых помещает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.02.2013, 17:52
Ответ Создать тему
Опции темы

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