Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки 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;» на «<» и «\» соотвественно.

Опубликовано: 2012.09.25, последняя правка: 2014.12.04    12:06

ОценитеОценки посетителей
   ████████████████ 6 (37.5%)
   ▌ 0
   ███ 1 (6.25%)
   ████████████████████████ 9 (56.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++

●  Вычисление определителя матрицы. Программа на русском Си




Последние отзывы

2024/04/18 11:14 ••• Ivan
Энтузиасты-разработчики компиляторов и их проекты

2024/04/18 04:47 ••• void
Признаки устаревшего языка

2024/04/11 00:08 ••• Автор сайта
Постфиксные инкремент и декремент

2024/04/09 23:50 ••• Автор сайта
Русский язык и программирование

2024/04/07 15:33 ••• MihalNik
Все языки эквивалентны. Но некоторые из них эквивалентнее других

2024/04/01 23:39 ••• Бурановский дедушка
Новости и прочее

2024/04/01 23:32 ••• Бурановский дедушка
Русской операционной системой должна стать ReactOS

2024/03/22 20:41 ••• void
Раскрутка компилятора

2024/03/20 19:54 ••• kt
О многократном резервировании функций

2024/03/20 13:13 ••• Неслучайный читатель
Надёжные программы из ненадёжных компонентов

2024/03/07 14:16 ••• Неслучайный читатель
«Двухмерный» синтаксис Python

2024/03/03 16:49 ••• Автор сайта
О неправомерном доступе к памяти через указатели

2024/02/28 18:59 ••• Вежливый Лис
Про лебедей, раков и щук