Нужны комментарии к коду - Pascal (80407)
Формулировка задачи:
uses crt,graph; const n=2; var a,a1:array [1..n,1..n] of real; b,b1,x:array [1..n] of real; function f(a,b,c,x:real):real; begin f:=-a*x/b+c/b; end; var i, j, k,x0,y0: integer; delenie,xn,xk,m,z,x1,y1:real; s,s1:string; begin clrscr; writeln('Vedite X1:'); readln(a[1,1]); writeln('Vedite Y1:'); readln(a[1,2]); writeln('Vedite koeffesent 1:'); readln(b[1]); writeln('Vedite X2:'); readln(a[2,1]); writeln('Vedite Y2:'); readln(a[2,2]); writeln('Vedite koeffesent 2:'); readln(b[2]); a1:=a; b1:=b; writeln('Rasshirenaya matrisa: '); for i:=1 to n do begin for j:=1 to n do write (a[i,j]:6:2); write (b[i]:6:2); writeln; end; for i:=1 to n-1 do begin for k:=i+1 to n do begin delenie:= a[k,i] / a[i,i]; for j:=i+1 to n do a[k,j]:= a[k,j] - a[i,j] * delenie; b[k]:= b[k] - b[i] * delenie; end; end; for i:=n downto 1 do begin for j:= i+1 to n do b[i]:= b[i] - a[i,j] * x[j]; x[i]:= b[i] / a[i,i]; end; writeln('Otvet : '); for i:=1 to n do writeln('X[',i:1,']=', x[i]:1:2); write('Nagmite na libuy klavishu: '); readln; x0:=0; initgraph(x0,y0,'');{инициализация графического режима} xn:=-16; xk:=10;{интервал по Х} x0:=getmaxX div 2;{начало координат по Х} y0:=getmaxY div 2;{начало координат по Y} m:=(y0-40)/F(a1[1,1],a1[1,2],b1[1],xk); line(x0-round(17*m),y0,x0+round(17*m),y0);{оси} line(x0,0,x0,getmaxY); for i:=1 to 16 do{максимальное количество засечек в одну сторону} begin line(x0-3,y0-round(i*m),x0+3,y0-round(i*m));{засечки на оси У} line(x0-3,y0+round(i*m),x0+3,y0+round(i*m)); line(x0+round(i*m),y0-3,x0+round(i*m),y0+3); {засечки на оси Х} line(x0-round(i*m),y0-3,x0-round(i*m),y0+3); if i mod 2=0 then begin{подпись оси У} str(i,s); outtextXY(x0-25,y0-round(i*m),s);{соответственно засечкам} outtextXY(x0-30,y0+round(i*m),'-'+s);{подпись оси Х} outtextXY(x0+round(i*m),y0+10,s); outtextXY(x0-round(i*m)-10,y0+10,'-'+s); end; end;{подписи концов осей} outtextXY(x0+round(16*m),y0-20,'X'); outtextXY(x0+5,10, 'Y');{график} z:=xn; setcolor(12); while z<=xk do begin if z=xn then moveto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m)) else lineto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m)); z:=z+0.1; end; z:=xn; setcolor(10); while z<=xk do begin if z=xn then moveto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m)) else lineto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m)); if abs(F(a1[1,1],a1[1,2],b1[1],z)-F(a1[2,1],a1[2,2],b1[2],z))<0.01 then begin x1:=z; y1:=F(a1[2,1],a1[2,2],b1[2],z); end; z:=z+0.1; end; setcolor(14); setfillstyle(1,14); fillellipse(x0+round(x1*m),y0-round(y1*m),3,3);{название} setcolor(14); str(x1:0:1,s); str(y1:0:1,s1); outtextXY(10,120,'x='+s+' y='+s1); readln end.
Решение задачи: «Нужны комментарии к коду»
textual
Листинг программы
uses crt,graph; //Подключаем консольку и Graph - графический построитель const //Раздел констант n = 2; //Целочисленная константа n = 2 var //раздел описания переменных a, a1: array [1..n, 1..n] of real; //Объявлены два двумерных массива - a и a1 размерностью n строк и n столбцов, элементы которых типа чисел с плавающей точкой b, b1, x: array [1..n] of real; //Три массива b b1 и x, такие же, как и предыдущие только ОДНОмерные function f(a, b, c, x: real): real; //Функция f, приниммает аргументы a, b, c, x типа чисел с плавающей точкой и возвращает число такого же типа begin //начало тела ф-ии f := -a * x / b + c / b; //Задание значения ф-ии выражением -a * x / b + c / b end; //конец описания ф-ии var //раздел описания переменных i, j, k, x0, y0: integer; //Объявлние пяти переменных типа целых чисел delenie, xn, xk, m, z, x1, y1: real; //Объявлние семи переменных типа чисел с плавающей точкой s, s1: string; //Объявлние двух переменных типа строк begin //начало основного тела программы clrscr; //очистка экрана (консоли), она появится на экране writeln('Vedite X1:'); //Выводим сообщение Vedite X1: readln(a[1, 1]); //считываем элемент массива a[1, 1] writeln('Vedite Y1:'); //Выводим сообщение Vedite Y1: readln(a[1, 2]); //считываем элемент массива a[1, 2] writeln('Vedite koeffesent 1:'); //Выводим сообщение Vedite koeffesent 1: readln(b[1]); //считываем элемент массива b[1] writeln('Vedite X2:'); //Выводим сообщение Vedite X2: readln(a[2, 1]); //считываем элемент массива a[2, 1] writeln('Vedite Y2:'); //Выводим сообщение Vedite Y2: readln(a[2, 2]); //считываем элемент массива a[2, 2] writeln('Vedite koeffesent 2:'); //Выводим сообщение Vedite koeffesent 2: readln(b[2]); //считываем элемент массива b[2] a1 := a; //присваиваем a1 a b1 := b; //присваиваем b1 b writeln('Rasshirenaya matrisa: ');//Выводим сообщение Rasshirenaya matrisa: for i := 1 to n do //запускаем цикл for для i от 1 до n begin //начало тела цикла for j := 1 to n do //запускаем цикл for для j от 1 до n write(a[i, j]:6:2); //выводим a[i, j] в формате 6 знаков и 2 знака после запятой write(b[i]:6:2); //выводим b[i] в формате 6 знаков и 2 знака после запятой writeln; //выводим конец строки (переход на новую) end; //конец тела цикла for i := 1 to n - 1 do //запускаем цикл for для i от 1 до n - 1 begin //начало тела цикла for k := i + 1 to n do //запускаем цикл for для k от i + 1 до n begin //начало тела цикла delenie := a[k, i] / a[i, i]; //переменной delenie присваиваем a[k, i] / a[i, i] for j := i + 1 to n do //запускаем цикл for для j от i + 1 до n a[k, j] := a[k, j] - a[i, j] * delenie; //переменной a[k, j] присваиваем a[k, j] - a[i, j] * delenie b[k] := b[k] - b[i] * delenie; //переменной b[k] присваиваем b[k] - b[i] * delenie end; //конец тела цикла end; //конец тела цикла for i := n downto 1 do //запускаем цикл for для i от n до 1 begin //начало тела цикла for j := i + 1 to n do //запускаем цикл for для j от i + 1 до n b[i] := b[i] - a[i, j] * x[j]; //переменной b[i] присваиваем b[i] - a[i, j] * x[j] x[i] := b[i] / a[i, i]; //переменной x[i] присваиваем b[i] / a[i, i] end;//конец тела цикла writeln('Otvet : ');//выводим сообщение Otvet : for i := 1 to n do //запускаем цикл for для i от 1 до n writeln('X[', i:1, ']=', x[i]:1:2);//выводим сообщение 'X[', i:1, ']=', x[i]:1:2 write('Nagmite na libuy klavishu: '); //выводим сообщение Nagmite na libuy klavishu: readln; //считываем сторку вникуда x0 := 0; //x0 присваиваем 0 initgraph(x0, y0, '');{инициализация графического режима} xn := -16; //xn присваиваем -16 xk := 10;{интервал по Х} x0 := getmaxX div 2;{начало координат по Х} y0 := getmaxY div 2;{начало координат по Y} m := (y0 - 40) / F(a1[1, 1], a1[1, 2], b1[1], xk); //m присваиваем (y0 - 40) / F(a1[1, 1], a1[1, 2], b1[1], xk) line(x0 - round(17 * m), y0, x0 + round(17 * m), y0);{оси} line(x0, 0, x0, getmaxY); //чертим линию из точки (x0, 0) в (x0, getmaxY) for i := 1 to 16 do{максимальное количество засечек в одну сторону} begin //начало тела цикла line(x0 - 3, y0 - round(i * m), x0 + 3, y0 - round(i * m));{засечки на оси У} line(x0 - 3, y0 + round(i * m), x0 + 3, y0 + round(i * m)); // Линия line(x0 + round(i * m), y0 - 3, x0 + round(i * m), y0 + 3); {засечки на оси Х} line(x0 - round(i * m), y0 - 3, x0 - round(i * m), y0 + 3); // Линия if i mod 2 = 0 then //если i чётно begin{подпись оси У} str(i, s); //строка outtextXY(x0 - 25, y0 - round(i * m), s);{соответственно засечкам} outtextXY(x0 - 30, y0 + round(i * m), '-' + s);{подпись оси Х} outtextXY(x0 + round(i * m), y0 + 10, s); //вывод текста outtextXY(x0 - round(i * m) - 10, y0 + 10, '-' + s); //вывод текста end; //конец if end;{подписи концов осей} outtextXY(x0 + round(16 * m), y0 - 20, 'X');//вывод текста outtextXY(x0 + 5, 10, 'Y');{график} //вывод текста z := xn; //присваиваем z значение xn setcolor(12); //устанавливаем цвет поля 12 while z <= xk do //пока z меньше либо равно xk begin //начало тела цикла if z = xn then moveto(x0 + round(z * m), y0 - round(F(a1[1, 1], a1[1, 2], b1[1], z) * m)) //если [условие] то перемещаемся в соответствующую точку else lineto(x0 + round(z * m), y0 - round(F(a1[1, 1], a1[1, 2], b1[1], z) * m)); //иначе линия в соответствующую точку z := z + 0.1; //увеличиваем z на 0.1 end; //конец цикла z := xn; //присваиваем z значение xn setcolor(10); //устанавливаем цвет поля 10 while z <= xk do //пока z меньше либо равно xk begin //начало тела цикла if z = xn then moveto(x0 + round(z * m), y0 - round(F(a1[2, 1], a1[2, 2], b1[2], z) * m)) //если [условие] то перемещаемся в соответствующую точку else lineto(x0 + round(z * m), y0 - round(F(a1[2, 1], a1[2, 2], b1[2], z) * m)); //иначе линия в соответствующую точку if abs(F(a1[1, 1], a1[1, 2], b1[1], z) - F(a1[2, 1], a1[2, 2], b1[2], z)) < 0.01 then //если [условие] begin //начало if x1 := z; //присваиваем x1 z y1 := F(a1[2, 1], a1[2, 2], b1[2], z); //присваиваем y1 F(a1[2, 1], a1[2, 2], b1[2], z) end; z := z + 0.1; //увеличиваем z на 0.1 end; setcolor(14); //устанавливаем цвет поля 14 setfillstyle(1, 14); //устанавливаем стиль заполнения 14 fillellipse(x0 + round(x1 * m), y0 - round(y1 * m), 3, 3);{название} //рисуем эллипс setcolor(14); //устанавливаем цвет поля 14 str(x1:0:1, s); //пишем s на поле str(y1:0:1, s1); //пишем s1 на поле outtextXY(10, 120, 'x=' + s + ' y=' + s1); //выводим текст на поле readln //запрашиваем ввод end. //конец основного тела программы
Объяснение кода листинга программы
- uses crt,graph; // Подключаем консольку и Graph - графический построитель
- const // Раздел констант - n = 2; // Целочисленная константа n = 2
- var // раздел описания переменных - a, a1: array [1..n, 1..n] of real; // Объявлены два двумерных массива - a и a1 размерностью n строк и n столбцов, элементы которых типа чисел с плавающей точкой - b, b1, x: array [1..n] of real; // Три массива b b1 и x, такие же, как и предыдущие только ОДНОмерные - i, j, k, x0, y0: integer; // Объявление пяти переменных типа целых чисел - delenie, xn, xk, m, z, x1, y1: real; // Объявление семи переменных типа чисел с плавающей точкой - s, s1: string; //Объявление двух переменных типа строк
- function f(a, b, c, x: real): real; // Функция f, принимает аргументы a, b, c, x типа чисел с плавающей точкой и возвращает число такого же типа
- begin //начало тела ф-ии - f := -a x / b + c / b; // Задание значения ф-ии выражением -a x / b + c / b
- var - i, j, k, x0, y0: integer; // Объявление пяти переменных типа целых чисел - delenie, xn, xk, m, z, x1, y1: real; // Объявление семи переменных типа чисел с плавающей точкой - s, s1: string; // Объявление двух переменных типа строк
- begin // Начало основного тела программы - clrscr; // Очистка экрана (консоли), она появится на экране - writeln('Vedite X1:'); // Выводим сообщение Vedite X1: - readln(a[1, 1]); // Считываем элемент массива a[1, 1] - writeln('Vedite Y1:'); // Выводим сообщение Vedite Y1: - readln(a[1, 2]); // Считываем элемент массива a[1, 2] - writeln('Vedite koeffesent 1:'); // Выводим сообщение Vedite koeffesent 1: - readln(b[1]); // Считываем элемент массива b[1] - writeln('Vedite X2:'); // Выводим сообщение Vedite X2: - readln(a[2, 1]); // Считываем элемент массива a[2, 1] - writeln('Vedite Y2:'); // Выводим сообщение Vedite Y2: - readln(a[2, 2]); // Считываем элемент массива a[2, 2] - writeln('Vedite koeffesent 2:'); // Выводим сообщение Vedite koeffesent 2: - readln(b[2]); // Считываем элемент массива b[2] - a1 := a; // Присваиваем a1 a - b1 := b; // Присваиваем b1 b
- writeln('Rasshirenaya matrisa:');// Выводим сообщение Rasshirenaya matrisa:
- for i := 1 to n do // Запускаем цикл for для i от 1 до n - for j := 1 to n do // Запускаем цикл for для j от 1 до n - write(a[i, j]:6:2); // Выводим a[i, j] в формате 6 знаков и 2 знака после запятой - write(b[i]:6:2); // Выводим b[i] в формате 6 знаков и 2 знака после запятой - writeln; // Выводим конец строки (переход на новую)
- ... (продолжение)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д