Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2009, 20:53   #1
AhmetJan
Пользователь
 
Аватар для AhmetJan
 
Регистрация: 24.01.2009
Сообщений: 11
Восклицание Помогите в алгоритме Евклида

Добрый вечер форумчане! Нашёл этот форум час назад, уже многим помог мне. Я начинающий программист, возникла проблема в коде, при написании алгоритма Евклида для нахождения НОД (Наибольший Общий Делитель). Попробую описать вам проблему: писал через "Console Wizard",
запускаю, выводит оба сообщения "Vvedite pervoe/vtoroe chislo", ввожу 25 (первое) и 15 (второе), но вот ответ выдает -1, а должен выдавать 5.
Ниже код:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#define eof -1

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int a;
int b;
int c;
int d;
int e;
printf("Vvedite pervoe chislo\n");
while((a=getchar())!=eof)
;
printf("Vvedite vtoroe chislo\n");
while((b=getchar())!=eof)
;
while(b!=0)
        {
        c=a/b;
        d=a-c*b;
        a=b;
        b=d;
        }
printf("Otvet......%d\n",a);
getch();
}
Модератор: тег CODE
Учись так, как будто тебе предстоит жить вечно;
живи так, как будто тебе предстоит умереть завтра.
О. Бисмарк

Последний раз редактировалось MaTBeu; 24.01.2009 в 21:29.
AhmetJan вне форума Ответить с цитированием
Старый 24.01.2009, 21:22   #2
FunDuck
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от AhmetJan Посмотреть сообщение
#define eof -1
while((a=getchar())!=eof)
;

while((b=getchar())!=eof)

}
printf("Otvet......%d\n",a);
getch();
}
Сначала ты определяешь eof=-1, затем вводишь строку до тех пор пока a не станет равна -1... Затем также с b... То есть в итоге у тебя a=b=-1...
Ну и в конце выводишь a как результат...
FunDuck вне форума Ответить с цитированием
Старый 24.01.2009, 21:30   #3
AhmetJan
Пользователь
 
Аватар для AhmetJan
 
Регистрация: 24.01.2009
Сообщений: 11
По умолчанию

Ага! Понял, просто я занимаюсь по книге и хотел написать что-то свое, а вышла белеберда. Я так понял, что eof используется как флаг, например: узнать сколько ввели символов.
Учись так, как будто тебе предстоит жить вечно;
живи так, как будто тебе предстоит умереть завтра.
О. Бисмарк
AhmetJan вне форума Ответить с цитированием
Старый 24.01.2009, 21:52   #4
FunDuck
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 13
По умолчанию

Поидее, eof(End Of File)-идентификатор конца файла. И если не ошибаюсь... функция getchar берет по одному символу...?
P.S. По-моему, в таких случаях удобнее использовать потоковый ввод/вывод...
FunDuck вне форума Ответить с цитированием
Старый 24.01.2009, 22:24   #5
AhmetJan
Пользователь
 
Аватар для AhmetJan
 
Регистрация: 24.01.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от FunDuck Посмотреть сообщение
Поидее, eof(End Of File)-идентификатор конца файла. И если не ошибаюсь... функция getchar берет по одному символу...?
P.S. По-моему, в таких случаях удобнее использовать потоковый ввод/вывод...
Если честно, то не совсем понял зачем eof, ну и ладно, потом почитаю на Википедия, или ещё где нибудь. Посмотри плиз, я решил по другому, но тут снова ошибка! Теперь выдает 10, вводил те же числа, т.е. 25 и 15.
Код:
Код:
#pragma hdrstop
#include <stdio.h>
#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int a;
int b;
int c;
int d;
printf("Vvedite pervoe chislo\n");
while(a!='\n')
a=getchar();
printf("[Vvedite vtoroe chislo\n");
while(b!='\n')
b=getchar();
while(b!=0)
        {
        c=a/b;
        d=a-c*b;
        a=b;
        b=d;
        }
printf("Otvet......%d\n",a);
getch();
}
//---------------------------------------------------------------------------
Модератор: тег CODE
Учись так, как будто тебе предстоит жить вечно;
живи так, как будто тебе предстоит умереть завтра.
О. Бисмарк

Последний раз редактировалось MaTBeu; 25.01.2009 в 00:45.
AhmetJan вне форума Ответить с цитированием
Старый 24.01.2009, 22:40   #6
FunDuck
Пользователь
 
Регистрация: 22.01.2009
Сообщений: 13
По умолчанию

Ну начнем с того, что все переменные типа int и a никогда не будет равна '\n', т.к. это символ.
Проще сделать так:
Код:
#include <iostream>
using namespace std;
void main(){
	int a,b,c,d;
	cout<<"Vvedite pervoe chislo\n";
	cin>>a;
	cout<<"Vvedite vtoroe chislo\n";
	cin>>b;
	while(b!=0){
	c=a/b;
	d=a-c*b;
	a=b;
	b=d;
	}
	cout<<"Otvet:"<<a<<'\n';
}
P.S. EOF-ставится в конце файла, чтобы его(конец) обозначить... Другими словами, чтобы программа знала когда читаемый файл заканчивается, иначе она может обратиться к области памяти, не относящейся к файлу, что может вызвать ошибку.

Модератор: ну все, доигрались. Получите оба по нарушению.

Последний раз редактировалось MaTBeu; 25.01.2009 в 00:47.
FunDuck вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл с постусловием. Алгоритм Евклида. BioVis Паскаль, Turbo Pascal, PascalABC.NET 5 31.10.2008 16:29
Как изобразить в алгоритме!!?? Шурик Общие вопросы Delphi 0 23.10.2007 00:10