• Уважаемый посетитель!!!
    Если Вы уже являетесь зарегистрированным участником проекта "миХей.ру - дискусcионный клуб",
    пожалуйста, восстановите свой пароль самостоятельно, либо свяжитесь с администратором через Телеграм.

Информатика (архив)

  • Автор темы Автор темы Arnett
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

Arnett

Почетный участник
Мне нужны тексты следующих программ, написанных на Паскале. Сама сейчас это сделать не могу, т.к. не была на объяснении темы, а сдать надо. Поможете? :)
1) Написать программу, которая выясняет, может ли последовательность символов обозначать 11ричное число.
2) Написать программу, которая после ввода 10ричного числа получает цифры его перевода в 11ричную систему счисления.
 
Arnett До которого тебе надо?
Первое не понятно. Немного подробнее можно?
которая после ввода 10ричного числа получает цифры его перевода в 11ричную систему счисления.
То есть переводит 10-число в 11-число?
 
Argo, до 12го апреля.
Первое - например, ты вводишь "12345", а программа выдает, 11ричное это число или нет.
Второе -
То есть переводит 10-число в 11-число?
да.
 
Arnett До 12 апреля мне слабо.
Zigzy Тебя не затруднит здесь выложить? Чувствую, в скором времени мне предстоит то же.
 
Argo извини, отправила сообщение для Arnett раньше, яем увидела твоё сообщение... Программу №1 получай. Вторую если успею между тестами, то сделаю. Но не обещаю.

Program ...;
Var a: string;
b: word;
i: integer;
BEGIN
readln(a); <----- считывает число в текстовом формате
b:=0;
for i:=1 to length(a) do
begin
if (a<'0') or (a>'A') then b:=1; <----- регистр "А" имеет
end; - - - - - - - - - - - - - - - - - - - - - - значение! Как и язык (англ.)
if b=0 the n writeln('Данное сочетание сомволов может являться числом в одиннадцатиричной системе счисления')
else writeln('Данное сочетание сомволов не может являться числом в одиннадцатиричной системе счисления');
Readln;
END.
 
Zigzy, если я правильно поняла, у тебя есть возможность проверить работоспособность программы на Паскале. Дело в том, что дома он у меня загнулся, и негде отладить программы. В связи с чем огромная просьба проверить мои проги и сказать где ошибки.
До субботы.
Первая:
Задание: Найти сумму последовательности x1,x2,x3,..xn (n=<30), начиная от первого отрицательного элемента и до конца последовательности.

Program sum(input,output);
Const
nmax:=30;
type
index:=1..nmax;
vec=array[index] of real;

Var
x:=vec;
I,n:index;
s:real;

begin
write('n=');
readln(n);
for I:=1 to n do
begin
write ('x[',I:2,'] =')
readln (x);
end;

I:=1;
while x>=0 do
I:=I+1;

s:=0;
for I to n do
s:=s+x;

write('s=',s);
end.
 
Argo проблема в том, что паскаля у меня дома нет :) А ту прогу я прям так написала...
 
Zigzy Аааа...нееет. Может попробуешь ошибки так найти?
Arnett А может у тебя есть?
 
Argo на каком паскале пишется программа? если на 7-ом, то нет нужды ничего обнулять... Всё равно 0 изначально. и смысл вот этого цикла -
I:=1;
while x>=0 do
I:=I+1;
я не поняла. Там же всё равно, отрицательные или положительные числа складываешь...
 
Найти сумму начиная с первого отрицательного. Какой Паскаль? Честно говоря без понятия, но вроде бы шестой. Но не факт.

Argo добавил [date]1082033478[/date]:
Zigzy Тебя не затруднит посетить эту тему утром в субботу :yes: . Просто еще несколько вопросов есть, но я сейчас не дома и вспомнить их не в состоянии.
 
Argo хорошо, мне не жалко, обязательно забегу...
а что значит "начиная с первого отрицательного"? При суммировании имеет значение, с чего начинаешь складывать? :)
 
Program vosem(input,output);
Type row=array[1..100] of real;
Var Num,I,NumbMax, NumbRMax, NumbVMax: integer;
MaxTemp,rmax,vmax; real;
Temp,r,v:row;

procedur FindMax (t: row; Num: integer;-
var Max:real;var Imax: integer);
var I:integer;
begin
Max:=T[1];
Imax:=1;

for I:=2 to Num do
if T>Max then
begin
Max:=T; Imax:=I
end
end;

begin

writeln('vvedite 4islo elementov');
readln(Num);
writeln('vvedite massiv zna4enij');

for I:=1 to Num do read (Temp);

r:=Temp*Temp;
Temp:=r;
FindMax (Temp,Num, MaxTemp, NumbMax);
Rmax:= MaxTemp;
NumbRMax:= NumbMax;

V:=(Temp-rmax)/Num;
Temp:=V;
FindMax (Temp,Num, MaxTemp, NumbMax);
Vmax:= MaxTemp;
NumbVMax:= NumbMax;
Writeln('Maximum', Rmax:4:1, 'Nomer=', NumbRMax:2);
Writeln('Maximum', Vmax:4:1, 'Nomer=', NumbVMax:2);

end.


Procedur
Type
Row= array[1..dim];
Qmatrix= array[1..dim,1..dim];

procedur NewMax(T:Qmatrix;dim:integer:-var Max:real; I,J:integer);
begin
Max:=T[1,1];
For I:=2 to dim do
for For J:=1 to dim do
If T[I,J]>Max then
Begin
Max:=T[I,J];
End;

T[I,I]:=Max;

End.

Program second (input,output);

var x,y,c:real;
label 1, 2, 3;
begin
writeln('vvedite x,y');
readln(x,y);

if (x=o) then
goto 1;
else
if (y=0) then
goto 1;
else
if (x>0) then
begin

if (y>0) then
goto 1;
else z:=y-x;
if (z<0) then
begin
c:=y/x
if (c=>-1) then
goto 1;
else goto 2;
end;

if (y<0) then
goto 1;
end;
else z:=y-x

if (z>0) then
begin c:=y/x;

if (c=>-1) then
goto 2;

else goto1;
end;

1:
writeln ('da')
goto 3;
2:
writeln ('net')
goto 3;
3:
end.




Program first (input,output);

var x,y,b,a,e,c,F,z:real;
label 1, 2;
begin
writeln('vvedite x,y,a,b. Prichem a I b ne ravnye 0');
readln(x,y,a,b);
if (a=0) then
goto 2;
else
z=y+(x-a)*(x-a);


if (z=o) then
goto 1;

else
c:=(x-a)*(x-a)*(x-a);
e:=exp(-(x/a)*(x/a)-(x/b)*(x/b));
F:=c/z*e;
Writeln('F=', F);
Goto 3;

1:
writeln('Proizoshlo delenie na 0. Izmenite znachenija x,y,a');
goto 3;
2:
writeln('Proizoshlo delenie na 0. Izmenite znachenija a,b');
goto 3;
3:
end.



Program third (input,output);

var x,a,b,h:real;
begin
writeln('vvedite x,a,b,h');
readln(x,a,b,h);
writeln(' x y');
writeln;

while x<(b +h/2) do
begin
If (x<0,5) then
Begin
Y:=1+sin(x+0,5)*sin(x+0,5)*sin(x+0,5);
End

Else
If (-0,5=<x) and (x=<0,5) then
Begin
Y:=1;
End

Else
If (0,5<x) then
Begin
Y:=1+sin(x-0,5)*sin(x-0,5)*sin(x-0,5);
End;

Writeln(x:5:2, y:10:4);
X:=x+h;
End;
Writeln('konec tablitsy');

End.

Program four(input,output);
Const N=10;
Var x,a,S:real;
I:integer;
Begin
Writln('vvedite x');
Readline(x);
A:= sin((I+1)*x)*i/((I+1)*(I+1)*sin(I*x));
S:=a;
For k:=2 to N do
Begin
A;=a+sin(2*x)/(4*sin(I*x));
S:=S+a;
End;
Writeln('Summa',N:2,'slagaemyx',S:7:4)
End.

Program five(input,output);
Var x,a,eps,y,S:real;
K:integer;
Begin
Writln('vvedite x, eps');
Readln(x,eps);
K:=0;
A:=1;
S:=0;
Repeat S:=S+a;
K:=k+1;
A:=a+((-1)*(2*k+3)cos((2*k+3)*x)/((2k+3)*cos((2*k+1)*x));
Until abs(a/y)<eps;
Writeln('S(',x:4:2,')=',S)
End.
Zigzy Имеет
Паладин+ Учла, спасибо.
 
Argo
приведи хоть один пример. А то начну цитировать первое правило арифметики... :)
Паладин+
хм... когда я учил TP7 препод, утверждал, что обнулять всё равно необходимо.
и это далеко не с лучшей стороны характеризует твоего препода ;) Потому что я даю 100%-ую гарантию того, что в 7-ом паскале все переменные изначально равны нулю
 
Информатика

Уважаемые специалисты по информатике! Помогите пожалуйста. Надо на Паскале составить несколько программ. До пятницы включительно.

1.Проверить, является ли исходная матрица, состоящая из целых чисел, нижней треугольной. Напечатать соответствующее сообщение.

2.Составить процедуру, которая определяет мах по модулю элемент в каждой строке квадратной матрицы и осуществляет его перестановку с соответствующим диагональным элементом.
 
Первая:

Код:
const
	MSize = 10; { размер матрицы }

var
	A: array[0..MSize-1, 0..MSize-1] of integer;
	i, j: integer;
	ok: boolean;

begin
	ok:=true;

{ здесь должен быть ввод матрицы, а не просто ее обнуление :) }
	for i:=0 to MSize-1 do begin
		for j:=0 to MSize-1 do begin
			A[i, j]:=0;
		end;
	end;

{ Для проверки с нулевой матрицей ее можно сделать ненулевой }
	{ A[3, 5]:=1; }

	if (MSize>1) then begin { матрицу 1-на-1 проверять нет смысла }
		for i:=0 to MSize-2 do begin
			for j:=i+1 to MSize-1 do begin
				if (A[i, j] <> 0) then ok:=false;
			end;
		end;
	end;

	if (ok) then
		writeln('OK!')
	else
		writeln('NOT OK!');
end.

Под "нижней треугольной" я понимаю матрицу со всеми элементами выше главной диагонали равными нулю. (Так, на всякий случай :) )
 
И вторая:

Код:
const
	MSize = 6;

type
	Matrix = array[0..MSize-1, 0..MSize-1] of integer;

var
	A: Matrix;

{ ввод матрицы }
procedure FillMatrix(MS: integer; var MTX: Matrix);
var
	i, j: integer;
begin
	if (MS>0) then begin
		for i:=0 to MS-1 do begin
			for j:=0 to MS-1 do begin
{ лень вспоминать, как рандом работает - напишем свой :) }
				MTX[i, j]:=22 - (i*733+j*519) mod 45;
			end;
		end;
	end;
end;

{ вывод матрицы }
procedure DumpMatrix(MS: integer; MTX: Matrix);
var
	i, j: integer;
begin
	if (MS>0) then begin
		for i:=0 to MS-1 do begin
			write('    ');
			for j:=0 to MS-1 do begin
				write(MTX[i, j]:5);
			end;
			writeln;
		end;
	end;
end;

{ та-самая-процедура :) параметры - размер матрицы и  собственно матрица }
procedure FindMaxInRowAndSwapItWithDiagonal(MS: integer; var MTX: Matrix);
var
	i, j: integer;
	m, k: integer;
	s: integer;
begin
	if (MS>1) then begin
		for i:=1 to MS-1 do begin

{ поиск максимума }
			m:=abs(MTX[i, 0]);
			k:=0;
			for j:=0 to MS-1 do begin
				if (m < abs(MTX[i, j])) then begin
	 				m:=abs(MTX[i, j]);
					k:=j;
				end;
			end;
{ обмен элементов }
			s:=MTX[i, k];
			MTX[i, k]:=MTX[i, i];
			MTX[i, i]:=s;
		end;
	end;
end;

begin
	FillMatrix(MSize, A);

	writeln('Before:');
	DumpMatrix(MSize, A);

	FindMaxInRowAndSwapItWithDiagonal(MSize, A);

	writeln('After:');
	DumpMatrix(MSize, A);
end.

ЗЫ. Обе проги проверил в "Borland Pascal Version 7.0" - компилятся, запускаются. Для каждой существует по крайней мере один набор данных, на которых они выдают верный результат :)
 
RuMoHoR, cпасибо. Буду разбираться.
Под "нижней треугольной" я понимаю матрицу со всеми элементами выше главной диагонали равными нулю
Я тоже, плюс к этому все элементы на упомянутой диагонали равны единице.

Еще вопрос: что вам известно про оператор выбора case?
Чем отличаются и когда использовать подпрограмму функцию, а когда процедуру?

3*. составить процедуру для транспонирования матрицы.
 
Argo
...плюс к этому все элементы на упомянутой диагонали равны единице.
Тогда надо добавить пару строчек. Исправленная версия:
Код:
	if (MSize>1) then begin
		for i:=0 to MSize-2 do begin
			for j:=i+1 to MSize-1 do begin
				if (A[i, j] <> 0) then ok:=false;
			end;
			if (A[i, i] <> 1) then ok:=false;
		end;
	end;
	if (MSize>0) then begin
		if (A[MSize-1, MSize-1] <> 1) then ok:=false;
	end else ok:=false;
ЗЫ: Матрица размером менее 1x1 не считается нижней треугольной :)

3*. составить процедуру для транспонирования матрицы.
Легко :) :
Код:
procedure Transpose(MS: integer; var MTX: Matrix);
var
	i, j: integer;
	s: integer;
begin
	if (MS>1) then begin
		for i:=0 to MS-2 do begin
			for j:=i+1 to MS-1 do begin
				s:=MTX[i, j];
				MTX[i, j]:=MTX[j, i];
				MTX[j, i]:=s;
			end;
		end;
	end;
end;
Вызывать как во второй проге.

Да, во второй проге я немного ошибся (в циклах - пропускалась первая строка и делалось лишнее сравнение с первым элементом строки). Читать так:
Код:
procedure FindMaxInRowAndSwapItWithDiagonal(MS: integer; var MTX: Matrix);
var
	i, j: integer;
	m, k: integer;
	s: integer;
begin
	if (MS>1) then begin
		for i:=0 to MS-1 do begin
			m:=abs(MTX[i, 0]);
			k:=0;
			for j:=1 to MS-1 do begin
				if (m < abs(MTX[i, j])) then begin
	 				m:=abs(MTX[i, j]);
					k:=j;
				end;
			end;
			s:=MTX[i, k];
			MTX[i, k]:=MTX[i, i];
			MTX[i, i]:=s;
		end;
	end;
end;

Еще вопрос: что вам известно про оператор выбора case?
Оператор как оператор :)
Можно вместо него и лесенку IF-ов нагородить, но с CASE-ом удобнее и нагляднее.
Пример:
Код:
case ch of
  'A': RestoreCmos;
  'B': WriteCmos;
  'C': Help;
end;
- в зависимости от значения переменной ch выполнится та или иная процедура.

Чем отличаются и когда использовать подпрограмму функцию, а когда процедуру?
Первая возвращает результат, вторая нет.

Вывести на экран значения элементов матрицы - процедура, т.к. ничего не возвращает.

Найти максимальный элемент - функция, возвращает число - значение элемента.

Ввод или транспонирование матрицы - особый случай.
Тут используют процедуры (можно и функции) с параметрами-переменными (в отличии от обычных параметров-значений), описанными с помощью var. В этом случае процедура может изменить их (и тем самым передать что-либо). Полезно, если надо вернуть либо большой по объему массив данных, либо сразу несколько значений (например значение и индексы максимального элемента).
 
RuMoHoR, еще раз огромное спасибо. Уже более-менее разобралась.
И еще пара вопросов:
4.подпрограмма реализующая метод половинного деления
5. реализующая обратный ход в методе Гаусса для решения системы линейных алгебраических уравнений
6. для перестановки 2х произвольных строк в матрице
7. кто такие параметры процедурного типа и что про них хорошего известно?
7*. Где бы взять хороший учебник по паскалю?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху