Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 20:16   #1
X-REY
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 10
Вопрос Не могу доделать задачу

Помогите доделать задачу.
Она впринципе работает, но несовсем правильно-тоэсть не показывает неправильное число особых элементов k.
Помогите переделать задачу что бы особое число k подсчитывалось правильно.

Вот условие задачи:
const n = 8; m = 12;
var k:integer;
С:аrrау [l..n,l..m] of integer;
Определить k—количество «особых» элементов массива С, считая элемент «особым», если:
в его строке слева от него находятся элементы, меньшие его, а справа — большие.

Вот то что у меня получилось:

uses crt;
const nmax=20;
type mas=array[1..nmax] of integer;{1 строка матрицы}
matr=array[1..nmax] of mas;{матрица=массив строк}
function F(x:byte;a:mas;n:byte):boolean;
var i,j:byte;
b:boolean;
begin
b:=true;
for j:=1 to x-1 do{проверяем слева}
if a[j]>=a[x] then b:=false;
for j:=x+1 to n do{проверяем справа}
if a[j]<=a[x] then b:=false;
F:=b;
end;
var a:matr;
n,m,i,j:byte;
k:integer;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i][j]:=random(20);
write(a[i][j]:3);
end;
writeln;
end;
writeln;
k:=0;
for i:=1 to n do
for j:=2 to m-1 do
if F(j,a[i],m) then k:=k+1;{считаем элементы}
write('Количество особых элементов=',k);
readln
end.
X-REY вне форума
Старый 25.10.2011, 20:50   #2
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

Код:
const n = 8; m = 12;
var k : integer;
    C : array [0..n-1,0..m-1] of integer;
    j,i : integer;

begin
  try
    randomize;
    writeln('Исходная матрица:');
    for i:=0 to n-1 do
    begin
      for j:=0 to m-1 do
      begin
        C[i,j]:=random(20);
        write(C[i,j]:3);
      end;
      writeln;
    end;
    writeln;
    k:=0;
    for I := 0 to n - 1 do
    for j:= 1 to m - 2 do
    begin
      if (C[i,j-1]<C[i,j]) and (C[i,j]<C[i,j+1]) then k:=k+1;
    end;
    Writeln(k);
    readln;
end.
вот немного подправил вашу программу
мог не совсем понять условие: все элементы до должны быть меньше или только соседний? ну и соответственно после искомого больше

Последний раз редактировалось Dush; 25.10.2011 в 20:52.
Dush вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно доделать задачу Dizel_Zombi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.06.2011 21:27
Помогите доделать задачу n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 2 08.01.2009 11:42
помогите доделать задачу motaro Фриланс 3 09.06.2008 19:59
Помогите доделать задачу!!!! Vincenzo Паскаль, Turbo Pascal, PascalABC.NET 4 11.05.2008 09:35