Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Прочее

Решение системы уравнений методом Гаусса. Программа на русском C++.

Приведённый текст программы записываем в файл «gauss», а приведённые в предыдущей статье список — в файл «russian». Перед компиляцией делаем транслитерацию нашей утилитой:

cpp-rus.exe  russian  russian.cpp
cpp-rus.exe  gauss  gauss.cpp
        После компиляции запускаем программу. А вот её текст:
#include 	<iostream.h> 
#include 	"russian.cpp" 
//===================================================================
// функция, преобразующая символ из кодировки Windows в кодировку DOS
//===================================================================
ц8	cp1251 в cp866 (ц8  c)
{	если ((0xC0 <= c) && (c <= 0xEF))
		c -= 0x40;
	иначе
	{	если ((0xF0 <= c))
			c -= 0x10;
		иначе
		{	если (c == 0xA8)
				c = 0xF0;
			иначе
			{	если (c == 0xB8)
					c = 0xF1;
				иначе
				{	если (c == 0xB9)
					{	c = 0xFC;
					}
					иначе
					{	если (c == 0xA0)
							c = 0x20;
	}	}	}	}	}
	вернуть  c;
};
//===================================================================
// функция, преобразующая строку из кодировки Windows в кодировку DOS
//===================================================================
ц32	cp1251 в cp866 (ц8* строка_1251, ц16  сколько, ц8* строка_866)
{	цикл (ц16  i=0; i < сколько; i++)
		строка_866[i] = cp1251 в cp866 (строка_1251[i]);
	вернуть  сколько;
};
//===================================================================
// функция, преобразующая строку из кодировки Windows в кодировку DOS
//===================================================================
ц7*	cp1251 в cp866 (ц7* строка_1251)
{	статич  ц7  строка [256*256];
	цел  длина = strlen((ц7*) строка_1251);
	cp1251 в cp866 ((ц8*) строка_1251, длина, (ц8*) строка);
	строка [длина] = 0;
	вернуть  строка;
};	
//===================================================================
#define		РАЗМЕР		20
пуст	Показать (двойн  матрица [РАЗМЕР] [РАЗМЕР+1], цел  Размер)
{
    цикл (int  i=0; i<  Размер; i++)
    {   цикл (int  j=0; j < Размер+1; j++)
            вывод << матрица [i][j] << "   ";
        вывод << "\n";
    }
    вывод << "\n";
};
//===================================================================
цел    равно 0 (двойн  число)
{   если  (fabs (число) > 0.000001)
        вернуть  0;
    вернуть  -1;
};
//===================================================================
main()
{   двойн    матрица [РАЗМЕР] [РАЗМЕР+1];
    цел    строка, столбец, тек;
    цел    Размер = 0;

    вывод << cp1251 в cp866 
        ("Программа расчёта матриц размером N x (N+1) методом Гаусса.\n\n");

    пока ( Размер < 1 || Размер > 20)
    {   вывод << cp1251 в cp866 ("Введите число строк в матрице (от 1 до ");
        вывод << РАЗМЕР << ") : ";
        ввод >> Размер;
    }

    сим    ответ[10];
    ответ[0] = 'n';
    ответ[1] = 0;

    пока (ответ[0] != 'y')
    {   цикл (строка = 0; строка < Размер; строка ++)
        {   цикл (столбец = 0; столбец <= Размер; столбец ++)
            {
                двойн  число;
                вывод << cp1251 в cp866 ("Введите строку № ") << строка;
                вывод << cp1251 в cp866 (" , столбец № ") << столбец;
                вывод << cp1251 в cp866 ("  матрицы:  ");

                ввод >> число;
                матрица [строка][столбец] = число;
        }   }
        вывод << cp1251 в cp866 ("Вы правильно ввели матрицу?\n");
        Показать (матрица, Размер);
        вывод << cp1251 в cp866 
            ("Y - правильно, приступить к расчёту\n");
        вывод << cp1251 в cp866 
            ("N - неправильно, ввести её заново. Ответьте Y или N : ");
        ввод >> ответ;
        если (ответ[0] == 'Y')
            ответ[0] = 'y';
    }

    вывод << cp1251 в cp866 ("\nСводим матрицу к треугольной. Ход решения.\n");

    цикл (тек=0; тек < Размер; тек++)
    {   цикл (строка = тек; строка < Размер; строка ++)
        {   двойн  делитель = матрица [строка] [тек];
            если (равно 0(делитель))
                перейти  ОШИБКА;
            цикл (столбец = тек; столбец < Размер + 1; столбец ++)
                матрица [строка] [столбец] /= делитель;
        }
        цикл (строка = тек+1; строка < Размер; строка ++)
        {    цикл (столбец = 0; столбец < Размер + 1; столбец ++)
                матрица [строка] [столбец] -= матрица [тек] [столбец];
        }
        Показать (матрица, Размер);
        вывод << "\n";
    }

    вывод << cp1251 в cp866 ("Теперь делаем единичную матрицу. Ход решения.\n");

    цикл (столбец = Размер-1; столбец > 0; столбец --)
    {   цикл (строка = столбец; строка > 0; строка --)
        {   двойн  множитель = матрица [строка-1] [столбец];
            двойн  вычитаемое = множитель * матрица [столбец] [Размер];

            матрица [строка-1] [Размер]    -= вычитаемое;
            матрица [строка-1] [столбец]    -= множитель;
        }
        Показать (матрица, Размер);
        вывод << "\n";
    }
    перейти  ЛЯПОТА;

    ОШИБКА:;
    {   вывод << cp1251 в cp866 ("Введена вырожденная матрица!\n");
        Показать (матрица, Размер);
    }
    ЛЯПОТА:;
    вернуть  0;
};
        P.S. Если вы скопировали этот текст «на пробу», не забудьте заменить «&lt;» и «&#92;» на «<» и «\» соотвественно.

Последняя правка: 2014-12-04    15:06

ОценитеОценки посетителей
   ████████████ 4 (28.5%)
   ▌ 0
   ███ 1 (7.14%)
   ███████████████████████████ 9 (64.2%)

Отзывы

     2013/01/05 05:49, Сергей

В исходнике есть непереведённые if и for.

     2013/03/21 14:25, Виталий

int тоже остались и, кстати, цел лучше заменить на цел16 или цел32, что было в Эльбрусе и алголе-68 еще 30-40 лет назад и вместо двойн тоже лучше сделать вещ64 или цел64

     2013/02/23 19:29, Автор сайта

Применял «ц16» и «ц32», а с «int» промашка вышла, забыл заменить. Но к теме именования типов данных ещё вернёмся, тут будет отдельная страница.

     2015/01/23 17:54, rst256

Если честно от кириллице в коде чуть не стошнило. Хотя кресты такое издевательство конечно заслужили.

     2016/04/15 08:14, rst256

P.S. Если вы скопировали этот текст «на пробу», не забудьте заменить «<» и «\» на «<» и «\» соответственно.

1. Потом выясните что означают типы ц.. (ц7 и ц8 это char у вас? Хм. может русский язык и правда негативно влияет на способность программировать)
2. Замените "цикл" на "для" т.к. "цикл" тут означает "do"
3. Наверное придется подключить string.h для strlen, и убрать .h у iostream.
4. "перейти" заменить на "переход".

     2016/04/15 15:59, Автор сайта

1. Если ц7 и ц8 в данном примере работают, значит они не влияют на способность программировать. Это целые числа – без знака и со знаком.
2. Здесь «цикл» означает «for».
3. Зависит от компилятора.
4. Глагольные формы лучше подходят для императивного программирования, ибо «императивный» - это «повелительный».

     2016/04/19 07:38, rst256

Да но <iostream> является стандартом, поверьте ваш компилятор примет его в такой форме. Так почему вы выбрали экзотику?
Где "russian.cpp" я люблю играть в шарады, но мне хотелось бы увидеть, как код примера превратиться в рабочий код на с++.
Скачиваем утилиту с сайта, и смотрим на результат. Потом можете поискать у себя в "russian.cpp" объявление макроса цикл. Хотя это только теория, "russian.cpp" в студию!

     2016/04/19 07:48, rst256

4. Глагольные формы лучше подходят для императивного программирования, ибо «императивный» - это «повелительный».

Согласен, но автор решил иначе, и это автор вы! Наверное, в недостающем файлике автор решил уже иначе, но я не видел файлик "russian.cpp". Народ царя, спасенного от демонов, требует. Говорят: царь-то не настоявший! Тьфу, блин, не царя, а "russian.cpp" требует.

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Прочее

Новости

Политика размещения комментариев и статей

Предложения и замечания

Все голосования

Компьютерные ребусы и этюды для программистов

●  Найти минимум из двух положительных целых чисел без операций сравнения

Утилита транслитерации русского C/C++ в стандартный

Решение системы уравнений методом Гаусса. Программа на русском C++.

Последние комментарии

2018/07/03 03:27, rst256
Философия языка

2018/06/25 15:10, Автор сайта
Продолжение цикла и выход из него

2018/06/14 00:37, rst256
Лень — двигатель прогресса

2018/05/31 18:52, rst256
Программирование без программистов — это медицина без врачей

2018/05/31 17:57, rst256
Циклы

2018/05/31 17:50, Comdiv
Разбор цепочек знаков операций

2018/05/31 17:42, Comdiv
Как отличить унарный минус от бинарного

2018/05/30 18:57, Александр Коновалов aka Маздайщик
Раскрутка компилятора