Замешательство с ПОДКЛЮЧЕНИМ БИБЛИОТЕК

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

polinka-malinka
Сообщения: 3
Зарегистрирован: 30 апр 2009, 18:01

Нашла эту программу. Хочу ее использовать как курсовую. Компилировала в Microsoft Visual C++ 2008 Express Edition . Немного ошибок в библиотеках. Тут же должна быть подключена библиотека #include <iostream.h> ...? Подключила ее в начало списка библиотек, после этого непонятные мне ошибки в последующих библиотеках.

Я в замешательстве, помогите, пожалуйста, хотелось бы именно эту работу защищать как курсовую, ибо здесь я почти полностью понимаю что к чему используется в теле программы :'(
==============
Текст программы

Код: Выделить всё

#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
void Kramer(double C[3][3],double D[3][1]);//Prototip funkcii
void main()
{
int i,j;
double A[3][3],B[3][1];
char z='y';
cout<<"\n"<<endl;
cout<<"\n"<<endl;
cout<<"Vipolnil stydent gryppi KI-05-3"<<endl;
cout<<"Homenko Igor"<<endl;
cout<<"\n"<<endl;
cout<<"\n"<<endl;
while (z=='y')
{
cout<<"Vvedite koefisienti pri neizvestnih x1,x2,x3 v 1-om,2-om,3-em yravneniax"<<endl;
for(i=0;i<3;i++)//vvod matrici koeficientov pri neizvesnix
for(j=0;j<3;j++)
cin>>A[j];
cout<<"\n"<<endl;
cout<<"Vvedite cvobodnii chleni v 1-om,2-om,3-em yravneniax"<<endl;
for (i=0;i<3;i++)// Vvod stolbca svobodnix chlenov
cin>>B
    * ;

cout<<"\n"<<endl;
cout<<"Dannaya sistema vigladit tak"<<endl;//Vvivod na ekran SLY
if(A[0][1]>=0 && A[0][2]>=0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<< B[0][0]<<endl;
if(A[0][1]>=0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<"+"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][2]>=0 && A[0][1]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<"+"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[0][1]<0 && A[0][2]<0)
cout<<A[0][0]<<"x1"<<A[0][1]<<"x2"<<A[0][2]<<"x3"<<"="<<B[0][0] <<endl;
if(A[1][1]>=0 && A[1][2]>=0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<< B[1][0]<<endl;
if(A[1][1]>=0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<"+"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][2]>=0 && A[1][1]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<"+"<<A[1][2]<<"x3"<<"="<<B[1][0] <<endl;
if(A[1][1]<0 && A[1][2]<0)
cout<<A[1][0]<<"x1"<<A[1][1]<<"x2"<<A[1][2]<<"x3"<<"="<<B[1][0]
<<endl;
if(A[2][1]>=0 && A[2][2]>=0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<< B[2][0]<<endl;
if(A[2][1]>=0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<"+"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][2]>=0 && A[2][1]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<"+"<<A[2][2]<<"x3"<<"="<<B[2][0] <<endl;
if(A[2][1]<0 && A[2][2]<0)
cout<<A[2][0]<<"x1"<<A[2][1]<<"x2"<<A[2][2]<<"x3"<<"="<<B[2][0]
<<endl;
cout<<"\n"<<endl;
cout<<"C pomochy rashirenoi matrici mi mogem predstaviy dannyy sistemy tak:"<<endl;//Vivod na ekran  rachirennoi matrici
cout<<A[0][0]<<setw(4)<<A[0][1]<<setw(4)<<A[0][2]<<setw(5)<<"|"<<setw (5)<<B[0][0]<<endl;
cout<<A[1][0]<<setw(4)<<A[1][1]<<setw(4)<<A[1][2]<<setw(5)<<"|"<<setw (5)<<B[1][0]<<endl;
cout<<A[2][0]<<setw(4)<<A[2][1]<<setw(4)<<A[2][2]<<setw(5)<<"|"<<setw (5)<<B[2][0]<<endl;
cout<<"\n"<<endl;
Kramer(A,B);//vizov funkcii Kramer
cout<<"Dlya novogo vvoda nagmite 'y', dla vihoda-'n' \n";
cin>>z;
}
}

void Kramer(double C[3][3],double D[3][1])//realizacia funkcii Kramer
{
double det,det1,det2,det3,x1,x2,x3;
cout<<"Nahogdenie opredelitelei"<<endl;
det=C[0][0]*C[1][1]*C[2][2]+C[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*C[2][0]-C[0][2]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*C[2][2]-C[0][0]*C[2][1]*C[1][2];
cout<<"opredelitel="<<det<<endl;//vichislenie opredelitela
det1=D[0][0]*C[1][1]*C[2][2]+D[1][0]*C[2][1]*C[0][2]+C[0][1]*C[1][2]*D[2][0]-C[0][2]*C[1][1]*D[2][0]-D[1][0]*C[0][1]*C[2][2]-D[0][0]*C[2][1]*C[1][2];
cout<<"opredelitel1="<<det1<<endl;//vichislenie opredelitela1
det2=C[0][0]*D[1][0]*C[2][2]+C[1][0]*D[2][0]*C[0][2]+D[0][0]*C[1][2]*C[2][0]-C[0][2]*D[1][0]*C[2][0]-C[1][0]*D[0][0]*C[2][2]-C[0][0]*D[2][0]*C[1][2];
cout<<"opredelitel2="<<det2<<endl;//vichislenie opredelitela2
det3=C[0][0]*C[1][1]*D[2][0]+C[1][0]*C[2][1]*D[0][0]+C[0][1]*D[1][0]*C[2][0]-D[0][0]*C[1][1]*C[2][0]-C[1][0]*C[0][1]*D[2][0]-C[0][0]*C[2][1]*D[1][0];
cout<<"opredelitel3="<<det3<<endl;//vichislenie opredelitela3
cout<<"\n"<<endl;
if(det!=0)
{x1=det1/det;//vichislenie x1
x2=det2/det;//vichislenie x2
x3=det3/det;//vichislenie x3
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
cout<<"x3="<<x3<<endl;}
else
cout<<"Sistema ne imeet reshenii, tak kak opredelitel=0"<<endl;
getch() ;
}
Sender Ghost
Сообщения: 5
Зарегистрирован: 17 май 2008, 02:10

Код: Выделить всё

[color="Red"]#include <iostream>
#include <iomanip>[/color]
#include <conio.h>

[color="Red"]using namespace std;[/color]

void Kramer(double C[3][3], double D[3][1]);   //Prototip funkcii

void main()
{
	int i, j;
	double A[3][3], B[3][1];
	char z = 'y';

	cout << "\n" << endl;
	cout << "\n" << endl;
	cout << "Vipolnil stydent gryppi KI-05-3" << endl;
	cout << "Homenko Igor" << endl;
	cout << "\n" << endl;
	cout << "\n" << endl;

	while (z == 'y')
	{
		cout << "Vvedite koefisienti pri neizvestnih x1,x2,x3 v 1-om,2-om,3-em yravneniax" << endl;

		for (i = 0; i < 3; i++)   //vvod matrici koeficientov pri neizvesnix
			for (j = 0; j < 3; j++)
				[color="#ff0000"]cin >> A[i][j];[/color]

		cout << "\n" << endl;
		cout << "Vvedite cvobodnii chleni v 1-om,2-om,3-em yravneniax" << endl;

		for (i = 0; i < 3; i++)   // Vvod stolbca svobodnix chlenov
			[color="#ff0000"]cin >> B[i][0];[/color]

		cout << "\n" << endl;
		cout << "Dannaya sistema vigladit tak" << endl;//Vvivod na ekran SLY

		if (A[0][1] >= 0 && A[0][2] >= 0)
			cout << A[0][0] << "x1" << "+" << A[0][1] << "x2" << "+" << A[0][2] << "x3" << "=" << B[0][0] << endl;

		if (A[0][1] >= 0 && A[0][2] < 0)
			cout << A[0][0] << "x1" << "+" << A[0][1] << "x2" << A[0][2] << "x3" << "=" << B[0][0] << endl;

		if (A[0][2] >= 0 && A[0][1] < 0)
			cout << A[0][0] << "x1" << A[0][1] << "x2" << "+" << A[0][2] << "x3" << "=" << B[0][0] << endl;

		if (A[0][1] < 0 && A[0][2] < 0)
			cout << A[0][0] << "x1" << A[0][1] << "x2" << A[0][2] << "x3" << "=" << B[0][0] << endl;

		if (A[1][1] >= 0 && A[1][2] >= 0)
			cout << A[1][0] << "x1" << "+" << A[1][1] << "x2" << "+" << A[1][2] << "x3" << "=" << B[1][0] << endl;

		if (A[1][1] >= 0 && A[1][2] < 0)
			cout << A[1][0] << "x1" << "+" << A[1][1] << "x2" << A[1][2] << "x3" << "=" << B[1][0] << endl;

		if (A[1][2] >= 0 && A[1][1] < 0)
			cout << A[1][0] << "x1" << A[1][1] << "x2" << "+" << A[1][2] << "x3" << "=" << B[1][0] << endl;

		if (A[1][1] < 0 && A[1][2] < 0)
			cout << A[1][0] << "x1" << A[1][1] << "x2" << A[1][2] << "x3" << "=" << B[1][0]
			<< endl;

		if (A[2][1] >= 0 && A[2][2] >= 0)
			cout << A[2][0] << "x1" << "+" << A[2][1] << "x2" << "+" << A[2][2] << "x3" << "=" << B[2][0] << endl;

		if (A[2][1] >= 0 && A[2][2] < 0)
			cout << A[2][0] << "x1" << "+" << A[2][1] << "x2" << A[2][2] << "x3" << "=" << B[2][0] << endl;

		if (A[2][2] >= 0 && A[2][1] < 0)
			cout << A[2][0] << "x1" << A[2][1] << "x2" << "+" << A[2][2] << "x3" << "=" << B[2][0] << endl;

		if (A[2][1] < 0 && A[2][2] < 0)
			cout << A[2][0] << "x1" << A[2][1] << "x2" << A[2][2] << "x3" << "=" << B[2][0]
			<< endl;

		cout << "\n" << endl;
		cout << "C pomochy rashirenoi matrici mi mogem predstaviy dannyy sistemy tak:" << endl;//Vivod na ekran rachirennoi matrici
		cout << A[0][0] << setw(4) << A[0][1] << setw(4) << A[0][2] << setw(5) << "|" << setw(5) << B[0][0] << endl;
		cout << A[1][0] << setw(4) << A[1][1] << setw(4) << A[1][2] << setw(5) << "|" << setw(5) << B[1][0] << endl;
		cout << A[2][0] << setw(4) << A[2][1] << setw(4) << A[2][2] << setw(5) << "|" << setw(5) << B[2][0] << endl;
		cout << "\n" << endl;

		Kramer(A, B);   //vizov funkcii Kramer

		cout << "Dlya novogo vvoda nagmite 'y', dla vihoda-'n' \n";
		cin >> z;
	}
}

void Kramer(double C[3][3], double D[3][1])    //realizacia funkcii Kramer
{
	double det, det1, det2, det3, x1, x2, x3;

	cout << "Nahogdenie opredelitelei" << endl;

	det = C[0][0] * C[1][1] * C[2][2] + C[1][0] * C[2][1] * C[0][2] + C[0][1] * C[1][2] * C[2][0] - C[0][2] * C[1][1] * C[2][0] - C[1][0] * C[0][1] * C[2][2] - C[0][0] * C[2][1] * C[1][2];

	cout << "opredelitel=" << det << endl;//vichislenie opredelitela

	det1 = D[0][0] * C[1][1] * C[2][2] + D[1][0] * C[2][1] * C[0][2] + C[0][1] * C[1][2] * D[2][0] - C[0][2] * C[1][1] * D[2][0] - D[1][0] * C[0][1] * C[2][2] - D[0][0] * C[2][1] * C[1][2];

	cout << "opredelitel1=" << det1 << endl;//vichislenie opredelitela1

	det2 = C[0][0] * D[1][0] * C[2][2] + C[1][0] * D[2][0] * C[0][2] + D[0][0] * C[1][2] * C[2][0] - C[0][2] * D[1][0] * C[2][0] - C[1][0] * D[0][0] * C[2][2] - C[0][0] * D[2][0] * C[1][2];

	cout << "opredelitel2=" << det2 << endl;//vichislenie opredelitela2

	det3 = C[0][0] * C[1][1] * D[2][0] + C[1][0] * C[2][1] * D[0][0] + C[0][1] * D[1][0] * C[2][0] - D[0][0] * C[1][1] * C[2][0] - C[1][0] * C[0][1] * D[2][0] - C[0][0] * C[2][1] * D[1][0];

	cout << "opredelitel3=" << det3 << endl;//vichislenie opredelitela3

	cout << "\n" << endl;

	if (det != 0)
	{
		x1 = det1 / det;//vichislenie x1
		x2 = det2 / det;//vichislenie x2
		x3 = det3 / det;//vichislenie x3

		cout << "x1=" << x1 << endl;
		cout << "x2=" << x2 << endl;
		cout << "x3=" << x3 << endl;
	}
	else
		cout << "Sistema ne imeet reshenii, tak kak opredelitel=0" << endl;

	getch();
}
Обратите внимание на различия.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

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

http://winmain.epage.ru/WinConsole.htm
polinka-malinka
Сообщения: 3
Зарегистрирован: 30 апр 2009, 18:01

Программа работает с поправками Sender Ghost'a и если подключить #include "stdafx.h" . Я очень рада, что все получилось :)
Большущее спасибо ! :) *низкий вам поклон за внимание*
polinka-malinka
Сообщения: 3
Зарегистрирован: 30 апр 2009, 18:01

Программа работает с поправками Sender Ghost'a и если подключить #include "stdafx.h" . Я очень рада, что все получилось :)
Большущее спасибо ! :) *низкий вам поклон за внимание*
в консоли все сделаю на русском, обязательно, как же без этого :) хоть какой то вклад же надо сделать в работу, а то совсем будет совестно... :rolleyes:
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):Если не знаете как выводить кириллицу в консоль, почитайте об этом в моей статье...
http://winmain.epage.ru/WinConsole.htm
WinMain, у меня вот какой вопрос. Не по статье, но о консольном выводе. Ты не знаешь, можно ли из консольного приложения понять, был ли при запуске этого приложения переопределен вывод в файл или нет? Для DOS-а на Паскале в библиотеках Turbo(Object) Professional имелся такой финт. А вот как сделать (и возможно ли сделать) это для Win32-консольного приложения?

Т.е. хотелось бы иметь возможность делать некоторые различия в выводимой информации в зависимости от того, переопределен вывод в файл ли нет, примерно так:

Код: Выделить всё

if (IsStdOutputRedefined ()) then
  ..................;
else
  ..................;
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Можно определить по параметрам командной строки.
Если командная строка выглядит таким образом:
myprog.exe > result.txt
то это означает, что поток был перенаправлен.
Может есть ещё какие-то способы, но я пока не знаю.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):Можно определить по параметрам командной строки.
Если командная строка выглядит таким образом:
myprog.exe > result.txt
Не попадает переопределение в командную строку (если смотреть через GetCommandLine ()).

Я пытался копать через анализ значений std-хэндлов (получаем чере GetStdHandle ()). В предположении, что если они не переопределены, то имеют какие-то опреденные значения. Вроде бы, на одной операционке (если правильно помню, это была Win2000) гипотеза подтверждалась, а на другой (Win98) не подтверждалась.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Здесь проблема в том, что командой на запуск приложения и переопределением потока занимается командный процессор cmd.exe, поэтому само приложение может не знать, куда будут перенаправлены данные в стандартном потоке. Вот если только к самому командному процессору обратиться с запросом полного текста командной строки,тогда наверно можно будет получить больше информации. Это делается через стандартную функцию system. Только вот имя этой команды я точно пока не знаю. Наверно можно ещё прочитать текст командной строки прямо из буфера консоли.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):... само приложение может не знать, куда будут перенаправлены данные в стандартном потоке...
Мне не нужно знать КУДА (в какой файл) перенаправлен вывод. Мне нужен сам факт, перенаправлен или нет. Да или нет. Булевская функция.

А в Win98, как я понимаю, файл cmd.exe отсутствует.

А вот алгоритм, который я где-то когда-то нарыл для DOS-а.
На ассемблере, но предназначена для линковки в Pascal.

Код: Выделить всё

;function StdOutRedefined : boolean;   external;
;  {-- Возвращает TRUE, если стандартный вывод переопределен --}
;  {-- в файл или еще куда (напр., в NUL) --}
StdOutRedefined Proc Far
         Locals @@
       Mov  Ax, 4400h
       Mov  Bx, 0001h      ; Хэндел стандартного вывода
       Int  21h
       Jc   @@loc_error

    ; Анализируем бит 7: если 0 - то файл
       Test Dx, 0080h
       JZ   @@loc_redefne      ; явно переопределено
    ; Станд. вывод - не файл
    ; Анализируем бит 1: если 1 - то StdOut
       Test Dx, 0002h
       JnZ  @@loc_no_redefne

      @@loc_redefne:
       Mov  AL, TRUE
       Ret

      @@loc_error:
      @@loc_no_redefne:
       Mov  AL, FALSE
       Ret
StdOutRedefined EndP
Ответить