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

Помогите узнать в чём ошибка программы? - C++

Восстановить пароль Регистрация
 
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 10:44     Помогите узнать в чём ошибка программы? #1
Помогите исправить программу: Задан граф в виде количества вершин n<=7, количества рёбер n>=28 и матрицы инцидентности. Проверить, есть ли в графе петли?
Вот собственно сама программа: не понимаю почему даже когда в матрице нету петель выводит, что петля есть?
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
#include <stdio.h> 
#include <conio.h> 
 
void main() 
{ 
int n, k; 
int a[28][7] = {0}; 
 
printf("Enter the numbers of nodes:\n"); 
scanf("%d", &n); 
printf("Enter the numbers of edges:\n"); 
scanf("%d", &k); 
 
int flag, check = 0; 
printf("Enter the incidence matrix (%d x %d):\n", k, n); 
for (int i = 0; i < k; i++, flag = 0) { 
for (int j = 0; j < n; j++) { 
scanf("%d", &a[j]); 
if (a[j]) flag++; 
} 
if (flag%2) check = 1; 
} 
 
if (check) { 
printf("\nGraph has loops."); 
} else { 
printf("\nGraph hasn't loops."); 
} 
 
getch(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 10:44     Помогите узнать в чём ошибка программы?
Посмотрите здесь:

В чём ошибка???((( C++
в чём ошибка C++
[C++]В чём ошибка? C++
C++ в чём ошибка C++
В чём может быть ошибка программы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
24.04.2012, 11:05     Помогите узнать в чём ошибка программы? #2
Не правильно написано
scanf("%d", &a[j]);
должно быть
C++
1
2
scanf("%d", &a[i][j]);
if (a[i][j]) flag++;
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 11:07  [ТС]     Помогите узнать в чём ошибка программы? #3
Цитата Сообщение от zss Посмотреть сообщение
Не правильно написано
scanf("%d", &a[j]);
должно быть
C++
1
2
scanf("%d", &a[i][j]);
if (a[i][j]) flag++;
ну это да, криво копирнул. но всё равно, работает не так как должна )
не понимаю в чём ошибка. если ввожу матрицу
1 0 1
0 1 0
2 0 1
Пишет что граф не имеет петель(
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
24.04.2012, 11:14     Помогите узнать в чём ошибка программы? #4
k- к-во строк, n - к-во столбцов
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < k; i++) 
{
    flag=0;
    for (int j = 0; j < n; j++) 
   {
         scanf("%d", &a[i][j]);
         if (a[i][j]) flag++;
   }
   if (flag%2) check = 1;
}
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 11:17  [ТС]     Помогите узнать в чём ошибка программы? #5
Цитата Сообщение от zss Посмотреть сообщение
k- к-во строк, n - к-во столбцов
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < k; i++) 
{
    flag=0;
    for (int j = 0; j < n; j++) 
   {
         scanf("%d", &a[i][j]);
         if (a[i][j]) flag++;
   }
   if (flag%2) check = 1;
}
Результат тот же.(
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 12:27     Помогите узнать в чём ошибка программы? #6
Честно сказать ничего не понял из задания... Смущает вот это
C++
1
2
3
4
5
6
7
for (int i = 0; i < k; i++, flag = 0) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[j]);
if (a[j]) flag++;
}
if (flag%2) check = 1;
}
а именно
C++
1
if (flag%2) check = 1;
Получается, что при первой итерации i цикла, если flag принимает нечетное значение - переменная check устанавливается в единицу и потом нигде не обнуляется, если оно требуется. А я думаю, что требуется её обнулять. Иначе нет смысла проходить весь цикл i
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 12:46  [ТС]     Помогите узнать в чём ошибка программы? #7
Цитата Сообщение от denys_l Посмотреть сообщение
Честно сказать ничего не понял из задания... Смущает вот это
C++
1
2
3
4
5
6
7
for (int i = 0; i < k; i++, flag = 0) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[j]);
if (a[j]) flag++;
}
if (flag%2) check = 1;
}
а именно
C++
1
if (flag%2) check = 1;
Получается, что при первой итерации i цикла, если flag принимает нечетное значение - переменная check устанавливается в единицу и потом нигде не обнуляется, если оно требуется. А я думаю, что требуется её обнулять. Иначе нет смысла проходить весь цикл i
if (flag%2) check = 1 // т.о после цикла, если в строке матрицы только 1 единичка, то чек приравниваем 1, т.е здесь есть петля. Хм..
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 12:49     Помогите узнать в чём ошибка программы? #8
Цитата Сообщение от gowart Посмотреть сообщение
if (flag%2) check = 1 // т.о после цикла, если в строке матрицы только 1 единичка, то чек приравниваем 1, т.е здесь есть петля. Хм..
Да, результатом 1%2 будет 1, потому условие верно и выполняется check = 1
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 12:53  [ТС]     Помогите узнать в чём ошибка программы? #9
Но в чём тогда проблема? Я так и не понял.
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 12:57     Помогите узнать в чём ошибка программы? #10
Вот так должно быть?
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:00  [ТС]     Помогите узнать в чём ошибка программы? #11
Ну да, только лишь в форме матрицы. И попробуй ещё ввести те же значения матрицы но без петли(т.е без двойки) и посмотрим какой будет результат?
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:06     Помогите узнать в чём ошибка программы? #12
я уже 10 раз код прогнал
в массиве 3х3
1 0 1
0 1 0
2 0 1
есть петля
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:07  [ТС]     Помогите узнать в чём ошибка программы? #13
И ты в коде ничего не менял? А пробывал вводить допустим:
1 0 0
0 0 0
1 0 1 ?
Просто я тоже пробую сейчас результат такой же, всегда есть петля.(
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:09     Помогите узнать в чём ошибка программы? #14
Цитата Сообщение от gowart Посмотреть сообщение
Ну да, только лишь в форме матрицы. И попробуй ещё ввести те же значения матрицы но без петли(т.е без двойки) и посмотрим какой будет результат?
Я не знаю будет ли петля или нет, но то что оно будет выводить "Has loops" - это сто процентов.
Строка 0 1 0 - check будет равен 1
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:11  [ТС]     Помогите узнать в чём ошибка программы? #15
Плин, кароче нифига я не понял
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:13     Помогите узнать в чём ошибка программы? #16
Что такое петля? И как определяется наличие петель в матрице n x m? Просто я пока ничего не понял
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:16  [ТС]     Помогите узнать в чём ошибка программы? #17
Петля - это дуга. которая соединяется с ребром графа. Петля определяется цифрой 2 в матрице. Все эти задания по теме графы.( а эту тему я не понимаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 13:19     Помогите узнать в чём ошибка программы?
Еще ссылки по теме:

В чём может быть ошибка программы? C++
В чём ошибка? C++
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка C++

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

Или воспользуйтесь поиском по форуму:
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:19     Помогите узнать в чём ошибка программы? #18
я тут тоже ничем не помогу. Я не знаком с графами
Yandex
Объявления
24.04.2012, 13:19     Помогите узнать в чём ошибка программы?
Ответ Создать тему
Опции темы

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