Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, пожалуйста, с задачами на Паскале (http://www.tehnari.ru/f41/t96499/)

Алёнка 22.05.2014 13:29

Помогите, пожалуйста, с задачами на Паскале
 
Здравствуйте! У меня есть программки на Паскале, но не могу их записать с помощью процедур, много разных ошибок делаю -самой смешно. Помогите пожалуйста.
№1

uses crt;
var s: string;
k,l,i: integer; c:char;
begin
write ('vvedi strocu iz bukv:');
readln (s);
k:=0;
l:=0;
for i:=1 to length (s) do
begin
if s[i]='A' then k:=k+1;
if s[i]='B' then l:=l+1;
end;
writeln ('A=',k);
writeln ('B=',l);
if k>l then
begin
for i:=length (s) downto 1 do
if s[i]='B' then
begin
delete (s,i,1);
write (i:4);
c:=readkey;
if c=#27 then halt(1);
end;
end;
write(s);
end.

Суть задачи: вводим строку из символов А и В, считаем их, сравниваем и если В больше, то удаляем В все.

№2

program mas6;
var a:array[1..50,1..60] of integer;
n,m,i,j,k,summa: integer;
begin
randomize;
write('n=');
readln(n);
write('m=');
readln(m);
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(15)-3;
for i:=1 to n do
begin
writeln;
for j:=1 to m do
begin
write(a[i,j]:8;
end;
end;
writeln;
writeln;
summa:=0;
for i:=1 to n do
begin
k:=1;
for j:=2 to m do
if a[i,j]>a[i,k] then
a[i,k]:=a[i,j];
summa:=summa+a[i,k];
end;
writekn(summa:, summa);
readln;
end.

Суть задачи находим сумму максимальных элементов каждой строки.

№3
Сегодня получила новую задачку по одномерному массиву и не соображу как соединить две мысли в одну, да еще с помощью процедур.

А задача следующая: найти наибольший простой элемент массива.

Суть ясна. Ищем простые числа и по ходу сравниваем их. У меня мозг отказывается решать ее. помогите пожалуйста.

Vladimir_S 22.05.2014 14:43

Цитата:

Сообщение от Алёнка (Сообщение 1034111)
Помогите пожалуйста.

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

Сообщение от Алёнка (Сообщение 1034111)
Суть задачи: вводим строку из символов А и В, считаем их, сравниваем и если В больше, то удаляем В все.

Но у Вас в программе поставлено условие "если количество "А" больше, то удаляем все "В"".
Цитата:

Сообщение от Алёнка (Сообщение 1034111)
Суть задачи находим сумму максимальных элементов каждой строки.

Ход мысли правильный, но вот реализация... Вот это что за такое за ахинея:
Цитата:

Сообщение от Алёнка (Сообщение 1034111)
writekn(summa:, summa);

Имелось в виду, вероятно
writeln('summa: ', summa);
Еще (но это, впрочем, мелочь): идентификатор k не нужен вовсе, ставьте вместо него 1 в индексах массива, да и всё. Зачем лишние усложнения?
Есть еще одна тонкость. Во избежание возможных глюков транслятора, лучше писать не
a[i,j]:=random(15)-3;
а
a[i,j]:=-3+random(15);
Казалось бы, одно и то же, ан не всегда.
Цитата:

Сообщение от Алёнка (Сообщение 1034111)
А задача следующая: найти наибольший простой элемент массива.

Пожалуйста:
Код:

Const
 N=160;
Var
 A:Array[1..N] of Byte;
 i,Max:Byte;

Function Test(J:Byte):Boolean;
Var
 m:Byte;
 b:Boolean;
begin
 if (J=2) or (J=3) then b:=true
 else
 if J=1 then b:=false
 else
  begin
  m:=(J div 2)+1;
  b:=true;
  repeat
    Dec(m);
    If (J mod m)=0 then b:=false;
  until (b=false) or (m=2);
  end;
 Test:=b;
end;

Begin
 Randomize;
 Max:=0;
 for i:=1 to N do A[i]:=Random(99)+1;
 for i:=1 to N do
  begin
  write(A[i]:4);
  if (Test(A[i])) and (A[i]>Max) then Max:=A[i];
  end;
 writeln;
 writeln;
 if Max=0 then
  writeln('No primes in the array!')
 else
  writeln('Maximal prime is ',Max);
 Readln
End.


Алёнка 22.05.2014 15:48

Vladimir_S, большое спасибо за уделенное внимание!
Здравствуйте, ваши замечания по поводу опечаток действительно уместны: writeln('summa: ', summa); это отвлеклась и не проверила перед отправкой, а про строку из А и В поторопилась. После сравнения, если А больше, то удаляем все В. Мысли бегут быстрее, чем я печатаю.
А вот на счет процедур - нужны или нет- преподаватель требует чтобы все было запроцедуренно, и когда я ему сдаю задачки, то он как коршун над цыпленком с этими процедурами ввода-вывода и т.д. а я как всегда чего-нибудь не туда пишу или вообще не дописываю.

Vladimir_S 22.05.2014 16:16

Цитата:

Сообщение от Алёнка (Сообщение 1034143)
А вот на счет процедур - нужны или нет- преподаватель требует чтобы все было запроцедуренно, и когда я ему сдаю задачки, то он как коршун над цыпленком с этими процедурами ввода-вывода и т.д. а я как всегда чего-нибудь не туда пишу или вообще не дописываю.

Знаете... вот ей-богу, с души воротит от потакания подобным преподавательским закидонам. Не, ну правда, ведь механизм подпрограмм - это колоссальное удобство, но только если они применяются там, где нужны, а не абы как. И вообще - в первой задаче просто совсем не вижу, куда воткнуть подпрограммы. Во второй - ну можно, конечно... Например, так:
Код:

Type
 Matr=array[1..50,1..60] of integer;

Var
 a:matr;
 n,m,i,j,k,summa: integer;

procedure Inp(p,q:integer; var c:Matr);
begin
 for i:=1 to p do
  for j:=1 to q do
  c[i,j]:=-3+random(15);
end;

procedure Out(p,q:integer; c:Matr);
begin
 for i:=1 to p do
  begin
  for j:=1 to q do write(c[i,j]:8);
  writeln;
  end;
end;

Function Find_Sum(p,q:integer; c:Matr):Integer;
var FS,Max:Integer;
begin
 FS:=0;
 for i:=1 to p do
  begin
  Max:=c[i,1];
  for j:=2 to q do
    if c[i,j]>Max then Max:=c[i,j];
  FS:=FS+Max;
  end;
 Find_Sum:=FS;
end;

Begin
 randomize;
 write('n= ');
 readln(n);
 write('m= ');
 readln(m);
 Inp(n,m,a);
 Out(n,m,a);
 writeln;
 writeln;
 summa:=Find_Sum(n,m,a);
 writeln('summa: ', summa);
 readln;
End.

Попробуйте ему скормить такой вариант - авось проглотит.

Алёнка 22.05.2014 16:56

Задачка (про максимальный простой элемент) замечательная, огромное спасибо, Vladimir_S! Я бы дня три точно промучилась бы, а то и больше. А на счет написания подпрограмм согласна полностью.

Алёнка 22.05.2014 16:59

Попробую скормить, правда он привереда. Спасибо


Часовой пояс GMT +4, время: 07:48.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.