• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

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

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, с задачами на Паскале

Алёнка1

Ученик
Регистрация
22 Май 2014
Сообщения
7
Реакции
0
Баллы
0
Помогите, пожалуйста, с задачами на Паскале

Здравствуйте! У меня есть программки на Паскале, но не могу их записать с помощью процедур, много разных ошибок делаю -самой смешно. Помогите пожалуйста.
№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='A' then k:=k+1;
if s='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='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
Сегодня получила новую задачку по одномерному массиву и не соображу как соединить две мысли в одну, да еще с помощью процедур.

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

Суть ясна. Ищем простые числа и по ходу сравниваем их. У меня мозг отказывается решать ее. помогите пожалуйста.
 
Помогите пожалуйста.
Но прежде всего отмечу, что искусственным впихиванием процедур туда, где они, извините, ни нафиг не нужны, я заниматься не буду. А не нужны они ни в одной из приведенных задач, кроме последней.
Суть задачи: вводим строку из символов А и В, считаем их, сравниваем и если В больше, то удаляем В все.
Но у Вас в программе поставлено условие "если количество "А" больше, то удаляем все "В"".
Суть задачи находим сумму максимальных элементов каждой строки.
Ход мысли правильный, но вот реализация... Вот это что за такое за ахинея:
Имелось в виду, вероятно
writeln('summa: ', summa);
Еще (но это, впрочем, мелочь): идентификатор k не нужен вовсе, ставьте вместо него 1 в индексах массива, да и всё. Зачем лишние усложнения?
Есть еще одна тонкость. Во избежание возможных глюков транслятора, лучше писать не
a[i,j]:=random(15)-3;
а
a[i,j]:=-3+random(15);
Казалось бы, одно и то же, ан не всегда.
А задача следующая: найти наибольший простой элемент массива.
Пожалуйста:
Код:
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.
 
Vladimir_S, большое спасибо за уделенное внимание!
Здравствуйте, ваши замечания по поводу опечаток действительно уместны: writeln('summa: ', summa); это отвлеклась и не проверила перед отправкой, а про строку из А и В поторопилась. После сравнения, если А больше, то удаляем все В. Мысли бегут быстрее, чем я печатаю.
А вот на счет процедур - нужны или нет- преподаватель требует чтобы все было запроцедуренно, и когда я ему сдаю задачки, то он как коршун над цыпленком с этими процедурами ввода-вывода и т.д. а я как всегда чего-нибудь не туда пишу или вообще не дописываю.
 
А вот на счет процедур - нужны или нет- преподаватель требует чтобы все было запроцедуренно, и когда я ему сдаю задачки, то он как коршун над цыпленком с этими процедурами ввода-вывода и т.д. а я как всегда чего-нибудь не туда пишу или вообще не дописываю.
Знаете... вот ей-богу, с души воротит от потакания подобным преподавательским закидонам. Не, ну правда, ведь механизм подпрограмм - это колоссальное удобство, но только если они применяются там, где нужны, а не абы как. И вообще - в первой задаче просто совсем не вижу, куда воткнуть подпрограммы. Во второй - ну можно, конечно... Например, так:
Код:
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.
Попробуйте ему скормить такой вариант - авось проглотит.
 
Задачка (про максимальный простой элемент) замечательная, огромное спасибо, Vladimir_S! Я бы дня три точно промучилась бы, а то и больше. А на счет написания подпрограмм согласна полностью.
 
Попробую скормить, правда он привереда. Спасибо
 
Назад
Сверху