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

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

Войти
Регистрация
Восстановить пароль
 
 
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
#1

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

24.04.2012, 10:44. Просмотров 636. Ответов 17
Метки нет (Все метки)

Помогите исправить программу: Задан граф в виде количества вершин 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(); 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите узнать в чём ошибка программы? (C++):

В чём может быть ошибка программы? - C++
Подскажите, пожалуйста, в чём может быть ошибка в программе: Test.cpp #include &lt;iostream&gt; #include &quot;Date.h&quot; #include...

В чём может быть ошибка программы? - C++
Программа должна читать файл parts.dat что бы создать репорк на основе данных в файле. На дисплай долны выводится: Part ...

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка - C++
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка. #include &lt;iostream&gt; #include...

В чём ошибка? - C++
Нужно написать программу через динамическое выделение памяти. #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; ...

В чём ошибка? - C++
Не могу понять! В чём ошибка?Почему работает не так как надо?В чём &quot;бреш&quot;? #include &lt;iostream&gt; #include &lt;locale.h&gt; #include...

В чём ошибка ? - C++
Задание: В одномерном массиве целых чисел заменить минимальное значение максимальным. Решение: { setlocale (LC_ALL,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
24.04.2012, 11:05 #2
Не правильно написано
scanf("%d", &a[j]);
должно быть
C++
1
2
scanf("%d", &a[i][j]);
if (a[i][j]) flag++;
0
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
Пишет что граф не имеет петель(
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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;
}
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;
}
Результат тот же.(
0
denys_l
52 / 52 / 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
0
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, т.е здесь есть петля. Хм..
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 12:49 #8
Цитата Сообщение от gowart Посмотреть сообщение
if (flag%2) check = 1 // т.о после цикла, если в строке матрицы только 1 единичка, то чек приравниваем 1, т.е здесь есть петля. Хм..
Да, результатом 1%2 будет 1, потому условие верно и выполняется check = 1
0
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 12:53  [ТС] #9
Но в чём тогда проблема? Я так и не понял.
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 12:57 #10
Вот так должно быть?
0
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:00  [ТС] #11
Ну да, только лишь в форме матрицы. И попробуй ещё ввести те же значения матрицы но без петли(т.е без двойки) и посмотрим какой будет результат?
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:06 #12
я уже 10 раз код прогнал
в массиве 3х3
1 0 1
0 1 0
2 0 1
есть петля
0
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:07  [ТС] #13
И ты в коде ничего не менял? А пробывал вводить допустим:
1 0 0
0 0 0
1 0 1 ?
Просто я тоже пробую сейчас результат такой же, всегда есть петля.(
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
24.04.2012, 13:09 #14
Цитата Сообщение от gowart Посмотреть сообщение
Ну да, только лишь в форме матрицы. И попробуй ещё ввести те же значения матрицы но без петли(т.е без двойки) и посмотрим какой будет результат?
Я не знаю будет ли петля или нет, но то что оно будет выводить "Has loops" - это сто процентов.
Строка 0 1 0 - check будет равен 1
0
gowart
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 13:11  [ТС] #15
Плин, кароче нифига я не понял
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 13:11
Привет! Вот еще темы с ответами:

В чём ошибка - C++
собственно вот. программа должна вывести логин, но не выводит его. по каким средствам можно заставить программу вывести логин #include...

В чём ошибка? - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #define PI 3.14159265 using namespace std; int main...

В чём ошибка? - C++
Описание проблемы: Открываю файл для чтения и записи. Записываю туда информацию. После этого, если: 1)я перевожу текущую позицию в...

В чём ошибка? - C++
Немогу понять где накосячил, после внесения данных программа зависает. Помогите пожалуйста.#include &quot;stdafx.h&quot; #include &quot;cstdlib&quot; ...


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

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

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