Электростальский форум

Hi-Tech => Компьютеры, периферия, мультимедиа и ПО => Тема начата: GerM от 21.01.07, 22:14:18

Название: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: GerM от 21.01.07, 22:14:18
Не знаю в том ли разделе я создал тему...ну да ладно, помогите пожалуйста с Паскалем, одному хорошему человеку, очень просил...вот задачка, просто надо написать программу в Паскале...

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

Заранее спасибо...

МОдераторы, сорри, но очень надо... <:/
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Insanity от 22.01.07, 12:21:55
Могу помочь с таким на Бейсике, но если обязательно Паскаль - http://forum.codenet.ru/forumdisplay.php?f=27 (http://forum.codenet.ru/forumdisplay.php?f=27)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 22.01.07, 15:38:37
Нате =)
Сеня ночью что-то не клеилось...переделал - получилось =)

uses Crt;
var
a,b:array [1..10,1..10] of Integer;
i,j,im,jm:Byte;
m:Integer;
begin
ClrScr;
randomize;

m:=101;
{/////////////////////////////////////////////////////////////////}
for i:=1 to 10 do begin
for j:=1 to 10 do begin
a[i,j]:=random(100);
if (a[i,j]>0) and (a[i,j]<m) then
begin
m:=a[i,j];
im:=i;jm:=j;
end;
end;
end;

{/////////////////////////////////////////////////////////////////}
for i:=1 to 10 do begin
for j:=1 to 10 do begin
                              b[i,j]:=a[i,j];
b[im,j]:=a[j,jm];
b[j,jm]:=a[im,j];
Write(a[i,j]:3);
end;
writeln;
end;
writeln;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
Write(b[i,j]:3);
end;
   writeln;
end;

WriteLn(m,' || ',im,':',jm);

ReadKey;
end.
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Mr DocToR от 22.01.07, 17:28:53
Ты проверял свою прогу? [[cool4]]
Если да, то ты должен был заметить, что всё получается криво, если этот элемент лежит на перечесечии какой-нить 2ой строки и 3-ого столбца.. И получается всё норм, когда элемент лежит на диагоналях матрицы.

+ я не понял, зачем ты при переборе всех элементов делаешь это:" a[i,j] :=a [j,i]" ?

Вот посмотри мой текст. Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 22.01.07, 18:22:49
Ты проверял свою прогу? [[cool4]]
Если да, то ты должен был заметить, что всё получается криво, если этот элемент лежит на перечесечии какой-нить 2ой строки и 3-ого столбца.. И получается всё норм, когда элемент лежит на диагоналях матрицы.

+ я не понял, зачем ты при переборе всех элементов делаешь это:" a[i,j] :=a [j,i]" ?

Вот посмотри мой текст. Я только беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)
Да, я проверял свою прогу
Где это я a[i,j] :=a [j,i] делаю? О_о о_О

Вот посмотри мой текст. Я только  беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях.(i=j или i+j=n+1, где nxn -размер массива.)

Посмотрел=) Лучше бы не смотрел=)
1. Ты задание читал? ПОчему ты говоришь, "Я только  беру минимальный полож не всей матрицы, а именно из тех элементов, которые лежат на диагоналях", хотя в задании просят: "В квадратной таблице обменяйте местами элементы строки и столбца на пересечении которых ноходится минимальный из положит элементов."
Я что-то не вижу ни слова про диагонали=)))
2. i+j=n+1, где nxn -размер массива --- я мож чего не понимаю...но если i,j - счетчики строк и столбцов, то условие i+j=n+1 не выполнимо=)))
Для примера - матрица 2х2, значит n=2, исзодя из этого i+j=3, исходя из этого i<>j ну никак=) Да и вообще чушь какая-то=)
3. Посмотрим скрин =)
3.1. Во-первых, по правилам записи номера элемента - первым числом записывается номер строки, а не столбца=) Ну да лана=)
3.2. Смотрим скрин =) У тебя прога нашла минимальный элемент=11, а как же первая строка?? А 9 вроде меньше 11 =)))) Ну да лана, опустим и это =)
То, что строки и столбцы не совсем совпадают - это коллизия из-за самой постановки задачи, опустим=) НО, столбец на строку намана заменился, а вот строка на столбец...НЕА=) посмотри в 3-ей строке выделил жОлтым=) У нас 21, а должно быть 11 =) Хотя может из первой таблицы эта 21 как-то закралась (не смотрел ещё код, потому не совсем понимаю почему;) )

ГОСПОДИ, не, я на этот ужас смотреть не могу=) ЗАЧЕМ МУДРИТЬ!?:)))))))
ИМХО, алгоритм:
1. Находим мин. эл-т в матрице
2. Запоминаем координаты этого эл-та
3. Формируем новую матрицу = первичной
4. В новой матрице за константу ставим строку(например, не помню что я на что менял в проге)))))))) ) и цикл по столбцам и приравниваем к столбцу из первичной матрицы, путем прогона по тому же циклу, только константа будет уже столбец, а строка идет по циклу. Константы - это координаты минимального элемента в матрице.
Точно так же меняем и столбец на строку.
5. вывод новой матрицы

Собссно, зачем такой код жуткий как у тебя - не понимаю. Зачем так много переменных? Когда надо всего 2 массива, 4 счетчика и 1 временная переменная для нахождения мин. элемента (пузырек ;) )

ПыСы. По существу про глюки моей проги выслушаю =) Желательно с картинками =)
ПыПыСы. Не претендую на супер-программера, но меня учили оптимизировать код. Чем проще система - тем стабильнее работа ;)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Mr DocToR от 22.01.07, 23:41:06
Да, текст и впрям большой у мну.. просто последние ДЗ заставляли работать без введения новых массивов(привычка) =) + я рассматриваю все условия, которые могут привести к ошибке.
Вот исправил текст, была нелепая ошибка ("<>" не там поставил).

Дык, товарисц, вы моё сообщение даже , видимо, не дочитали, раз задаёте такие вопросы, ответы на которые лежат в предыдущем посту.
Да, кстати, можно даже задать условие, что если минимальный элемент лежит не на диагоналях, то поменять местами строку и столбец НЕЛЬЗЯ.
Поентому я просто ищу ОСОБЫЙ минимальный элемент.

Напишите ответ , если дана такая матрица:
213
456
789

ответ=?? :D


п.с. проверьте свою прогу ещё раз и посмотриче что у вас порядок элементов меняеца в этих строке и столбце.
п.с.2 А в условии сказано, что массив 10х10? []>0
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: exBoMBeR от 23.01.07, 09:22:36
Не вижу причин создавать второй массив ... имхо это антиоптимизация  [[curtain]]
Проще надо быть ... проще ... если у нас есть im и jm хранящие строку и столбец с минимальным элементом то обмен строки и столбца выполняется за один проход цикла:

for i=1 to 10 do
begin
  m := a[i, jm];
  a[i, jm] := a[im, i];
  a[im, i] := m;
end;

при этом удачно используется имеющаяся переменная m и это действительно начинает напоминать оптимизацию ...

Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 23.01.07, 17:38:39
Да, текст и впрям большой у мну.. просто последние ДЗ заставляли работать без введения новых массивов(привычка) =) + я рассматриваю все условия, которые могут привести к ошибке.
Вот исправил текст, была нелепая ошибка ("<>" не там поставил).

Дык, товарисц, вы моё сообщение даже , видимо, не дочитали, раз задаёте такие вопросы, ответы на которые лежат в предыдущем посту.
Да, кстати, можно даже задать условие, что если минимальный элемент лежит не на диагоналях, то поменять местами строку и столбец НЕЛЬЗЯ.
Поентому я просто ищу ОСОБЫЙ минимальный элемент.

Напишите ответ , если дана такая матрица:
213
456
789

ответ=?? :D


п.с. проверьте свою прогу ещё раз и посмотриче что у вас порядок элементов меняеца в этих строке и столбце.
п.с.2 А в условии сказано, что массив 10х10? []>0
ПОЧЕМУ нельзя менять местами? В условии нигде не сказано, что минимальный элемент должен остаться на своем месте ;) Не сказано и про идентичность. Так что это личные выводы и просто придирчивость.
По поводу размерности матрицы - если лень ручками поменять, можно использовать переменную, без проблем=) А ещё можно работать с открытыми массивами и вводить размерность с клавиатуры. Но зачем усложнять?

2exBoMBeR, хорошая идея, полностью согласен =)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: M@lish от 23.01.07, 17:56:44
Нужен програмист на один день... Есть 2 задачи, которые нужно решить....но без обьяснения это не получиться... Поэтому, у кого есть время...в личку!
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Sht?ih(S_РФ) от 23.01.07, 18:31:59
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:

мож увидев готовую картину ченить и пойму.

вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: LEND от 23.01.07, 18:46:59
Привет участникам темы
Случайно натолкнулся на эту тему.
Дана задача:
 В квадратной таблице обменяйте местами элементы строки и столбца
 на пересечении которых ноходится минимальный из положительных элементов.
 

Задачка не такая уж и сложная. GERM имел ввиду под квадратной таблицей - квадратную матрицу. Необязательно сначала применять RANDOM и RANDOMIZE. Дайте человеку понять саму матрицу, рассмотреть ее и на основе поставленной задачи даже взглядом определить минимальное положительное число в ней. Пусть он поймет и обоснует сначала на примере как это надо
сделать, а уж потом применяет автоматическое построение матрицы любой N величины.
И еще в условии задачи бы сказано про квадратную таблицу (квадратную матрицу). Могу напомнить, что такое вообще матрица и в частности квадратная матрица.
Так вот МАТРИЦА - прямоугольная таблица составленная из m-n чисел, называется
матрицей из m строк и n столбцов или матрицей размера m*n, а также еще m*n -
матрицей.

               |A11 A12 A13 ... A1n|
               |A21 A22 A23 ... A2n|  (1)
               |A31 A32 A33 ... A3n|

Числа Aij(i=1,2,...,m; j=1,2,...,n) называются элементами матрицы;
первый индекс i элемента указывает номер строки, в которой стоит элемент матрицы, а второй индекс j - номер столбца.
Матрица (1) может обозначаться также
    ||Aij||, i=1,2,...,m; j=1,2,2,...,n
Кроме того, для матриц используются обозначения
       (Aij) и [Aij]

Квадратная матрица(порядка n) - это когда число строк матрицы равно числу
ее столбцов ( и равно n)


Я даю наглядное решение этой задачи:
Пусть есть квадратная матрица массивом 3x3
                  3 -5  1
                  2  6  4
                 -4  8  7
Наименьшее положительное число здесь 1
Тогда в этом случае строка матрицы массива 3x3, где находится число 1
                 3,-5,1
Столбец  1,4,7

Необходимо заменить столбец на строку или строку на столбец(разницы нет)
При замене строка - 7,4,1 а столбец 1,-5,3
Причем не должна переставляться только 1(наименьший полож.элемент), а остальные элементы заменяемых строк и столбцов могут переставляться как угодно, т.е. 4,7,1 а столбец 1,3,-5
В этом суть не меняется исходя из условия задачи. Там в какой последовательности должны идти переменные - не указано.

Можно устанавливать наименьшее положительное число в любую ячейку.
При расчете это число должно находиться где бы оно не стояло и от него начинался отсчет замены.
И так можно решить другие квадратные матрицы любого объема.
Частный случай(пример 1):
uses crt;
const
 (*Не ставьте только n=1 и по 1 элементу. В программе можно сделать на это защиту.*)
 n=3; {Кол.элементов последовательности}
  Matrix:array[1..3,1..3] of integer=((3,-5,1),(2,6,4),(-4,8,7));
var
 i,j,ii,jj: integer;                      {счетчики}
 Min:integer;                          {минимальный положительный элемент в массиве}
 stolb,strok:integer;                {столбец и строка}
 strMas:array[1..n] of integer;  {элементы массива строки}
 stbMas:array[1..n] of integer; {элементы массива столбца}
 kolstb,kolstr:integer;              {кол. столбцов и строк в матрице}
 obmen:integer;                     {переменная обмена}
BEGIN
ClrScr;


          Min:=0;
for i:=1 to n do begin
  for j:=1 to n do begin
              if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
                      Min:=Matrix[i,j];
                                                       end;
                   end;
                 end;

          if Min=0 then begin
           writeln('Элементы массива - отрицательные!');
           readln;
           halt;
                        end;

writeln(' ':10,'Матрица');
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
  for j:=1 to n do begin
     if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
                                                    Min:=Matrix[i,j];
                                                    strok:=i;
                                                    stolb:=j;
                                                    end;
    write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
                     end;
           writeln
                  end;
{readln;}


 writeln('Минимальное положительное в матрице число -> ',Min);
 writeln('Строка при мини. положительном числе -> ',strok);
 writeln('Столбец при мини. положительном числе -> ',stolb);
 writeln(' ---------------------------');
   for i:=1 to n do begin
    for j:=1 to n do begin
    {================= Определяем и записываем строки}
             if i=strok then begin
                             inc(ii);
                             strMas[ii]:=Matrix[strok,j];
                            end;

    {================= Определяем и записываем столбцы}
             if j=stolb then begin
                             inc(jj);
                             stbMas[jj]:=Matrix[i,stolb];
                             end;
                     end;
                    end;
  kolstb:=n;
  kolstr:=n;
writeln('Количество строк -> ',kolstr);
writeln('Количество столбцов -> ',kolstb);

{===============================================}
          write('Было - строка: ');
          for ii:=1 to n do begin
           write(strMas[ii],' ');
                            end;
       writeln;
{======================= Показ столбцов ==============}
          write('Было - столбец: ');
          for jj:=1 to n do begin
                write(stbMas[jj],' ');
                            end;
       writeln;
       writeln(' ---------------------------');
{=====================================================}

{===================== Обмен строк =========}
          for ii:=1 to n do begin
                    if ii=stolb then begin
                        obmen:=strMas[strok];
                        strMas[strok]:=strMas[ii];
                        strMas[ii]:=obmen;
                     end;
                          end;
{===================== Обмен столбцов =========}
          for jj:=1 to n do begin
                    if jj=strok then begin
                        obmen:=stbMas[stolb];
                        stbMas[stolb]:=stbMas[jj];
                        stbMas[jj]:=obmen;
                                     end;
                          end;
{========================= Показ столбцов ======================}
               write('Стало - столбец: ');
          for ii:=1 to n do begin
           write(strMas[ii],' ');
                            end;
       writeln;
{======================= Показ строк ==============}
               write('Стало - строка: ');
          for jj:=1 to n do begin
                write(stbMas[jj],' ');
                            end;
       writeln;
       writeln(' ---------------------------');
{=====================================================}

for i:=1 to n do begin
  for j:=1 to n do begin
               if i=strok then begin
                             Matrix[strok,j]:=stbMas[j];
                            end;
                if j=stolb then begin
                      Matrix[i,stolb]:=strMas; {здесь пишется strMas(i) - только скобки квадратные }
                                end;                    {тег i не дает их писать}
                   end;
                 end;

for i:=1 to n do begin
  for j:=1 to n do begin
   write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
                   end;
           writeln
                  end;

writeln('Продолжение - ENTER(ВВОД)');
readln;
END.

Можно увеличить статический массив. Можно переставить элементы массива.
При увеличение нужно добавить в массив еще элементы и изменить n

Даю пример расчета - полученный результат.
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: LEND от 23.01.07, 19:00:20
А вот теперь когда алгоритм ясен можно сделать и автоматическое построение матрицы
Создание алгоритма не вызывает проблем.
Не ставьте только n1=1, хотя в программе можно сделать на это защиту.

Пример 2

uses crt;
const
 n1=9;
 { где n1 =4,9,25,36,49 и т.д. квадраты}
var
 n:integer;
 i,j,ii,jj,m: integer;                               {счетчики}
 Min:integer;                                      {минимальный положительный элемент в массиве}
 stolb,strok:integer;                            {столбец и строка}
 strMas:array[1..100] of integer;           {элементы массива строки}
 stbMas:array[1..100] of integer;          {элементы массива столбца}
 kolstb,kolstr:integer;                         {кол. столбцов и строк в матрице}
 obmen:integer;                                {переменная обмена}
 kor:integer;                                     {целое число из корня n1}
 k:array[1..n1] of integer;                   {Массив случайных чисел}
 Matrix:array[1..100,1..100] of integer; {Массив матрицы - можно взять и больше}
BEGIN
ClrScr;
if Trunc(sqrt(n1))<>sqrt(n1) then begin
 writeln('Вводите целое число и т.д 4,9,25,36,49 ');
   readln;
   halt
end;
{==================== Находим корень =============}
      kor:=TRUNC(sqrt(n1));
      n:=kor;
writeln('Дана последовательность ',n1,' чисел');
    (* RANDOMIZE; {Менять последовательность}*) {можно разремачить}
        Min:=0;
  for m:=1 to n1 do begin
        k[m]:=RANDOM(-m);
        k[m]:=k[m] div 1000;
         if (k[m]<>0) and (k[m]>0) then Min:=k[m];
        write(k[m],' ')
                     end;

          if Min=0 then begin
           writeln('Элементы массива - отрицательные!');
           readln;
           halt;
                        end;
{========== Создаем матрицу исходя из получ. квадр. корня ================}
                 i:=1;
                 j:=0;
            for m:=1 to n1 do begin
                if j=kor then begin
                  j:=0;
                  i:=i+1
                end;
                  j:=j+1;
                 Matrix[i,j]:=k[m];
                              end;
writeln;
{===== Выводим матрицу и находим наименьший положительный ее элемент}
writeln(' ':10,'Матрица');
for i:=1 to n do begin
  for j:=1 to n do begin
     if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
                                                    Min:=Matrix[i,j];
                                                    strok:=i;
                                                    stolb:=j;
                                                    end;
   write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
                   end;
           writeln
                  end;
readln;
 writeln('Минимальное положительное в матрице число -> ',Min);
 writeln('Строка при мини. положительном числе -> ',strok);
 writeln('Столбец при мини. положительном числе -> ',stolb);
 writeln(' ---------------------------');
   for i:=1 to n do begin
    for j:=1 to n do begin
    {================= Определяем и записываем строки}
             if i=strok then begin
                             inc(ii);
                             strMas[ii]:=Matrix[strok,j];
                            end;

    {================= Определяем и записываем столбцы}
             if j=stolb then begin
                             inc(jj);
                             stbMas[jj]:=Matrix[i,stolb];
                             end;
                     end;
                    end;
  kolstb:=n;
  kolstr:=n;
writeln('Количество строк -> ',kolstr);
writeln('Количество столбцов -> ',kolstb);

{===============================================}
          write('Было - строка: ');
          for ii:=1 to n do begin
           write(strMas[ii],' ');
                            end;
       writeln;
{======================= Показ столбцов ==============}
          write('Было - столбец: ');
          for jj:=1 to n do begin
                write(stbMas[jj],' ');
                            end;
       writeln;
       writeln(' ---------------------------');
{=====================================================}

{===================== Обмен строк =========}
          for ii:=1 to n do begin
                    if ii=stolb then begin
                        obmen:=strMas[strok];
                        strMas[strok]:=strMas[ii];
                        strMas[ii]:=obmen;
                     end;
                          end;
{===================== Обмен столбцов =========}
          for jj:=1 to n do begin
                    if jj=strok then begin
                        obmen:=stbMas[stolb];
                        stbMas[stolb]:=stbMas[jj];
                        stbMas[jj]:=obmen;
                                     end;
                          end;
{========================= Показ столбцов ======================}
               write('Стало - столбец: ');
          for ii:=1 to n do begin
           write(strMas[ii],' ');
                            end;
       writeln;
{======================= Показ строк ==============}
               write('Стало - строка: ');
          for jj:=1 to n do begin
                write(stbMas[jj],' ');
                            end;
       writeln;
       writeln(' ---------------------------');
{=====================================================}

for i:=1 to n do begin
  for j:=1 to n do begin
               if i=strok then begin
                             Matrix[strok,j]:=stbMas[j];
                            end;
                if j=stolb then begin
                      Matrix[i,stolb]:=strMas; {здесь пишется strMas(i) - только скобки квадратные }
                                end;                   {тег i не дает их писать}  
                   end;
                 end;

for i:=1 to n do begin
  for j:=1 to n do begin
   write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
                   end;
           writeln
                  end;

writeln('Продолжение - ENTER(ВВОД)');
readln;
END.


Алгоритм можно применить и не только для квадратных матриц
В частном(примере 1) можно варьировать кол. элементов и n
Даю примеры расчета - данные результата.

Ну вот и все.
С уважением к участникам ТЕМЫ

LEND
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Роза Люксембург от 23.01.07, 19:59:36
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:

мож увидев готовую картину ченить и пойму.

вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."

считаете сумму элементов каждой строки и смотрите кто больше, например:
a(mxn) - исходный массив
b(1xn) - искомая строка

smax = 0; - сумма элементов искомой строки

for i = 1 to m
{
   s = 0;
   for ii = 1 to n
   {
      s = s + a(i, ii); 
   }
   if s > smax then
   {
      smax = s;
      for q= 1 to n
      {
         b(1, q) = a(i, q)
      }

   }
}

вы, правда, не сказали на каком языке надо, но основная идея такая...
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Sht?ih(S_РФ) от 23.01.07, 22:49:00
Люди.. а мне случаем не поможите? а то чет ни как не вьеду:

мож увидев готовую картину ченить и пойму.

вобщем задача такая:
"Дана матрица А(ввод элементов матрицы осуществляется с клавиатуры). Вывести на экран строку, сумма элементов которой больше."

считаете сумму элементов каждой строки и смотрите кто больше, например:
a(mxn) - исходный массив
b(1xn) - искомая строка

smax = 0; - сумма элементов искомой строки

for i = 1 to m
{
   s = 0;
   for ii = 1 to n
   {
      s = s + a(i, ii); 
   }
   if s > smax then
   {
      smax = s;
      for q= 1 to n
      {
         b(1, q) = a(i, q)
      }

   }
}

вы, правда, не сказали на каком языке надо, но основная идея такая...
Идею я понял.. язык - турбопаскаль.. а вот как эту  идею в жизнь воплотить?
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 24.01.07, 08:01:39
2Lend,доброго времени суток и Вам. Можно немного критики и обсуждения касаемо предложенного кода?

1.

          Min:=0;
for i:=1 to n do begin
  for j:=1 to n do begin
              if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
                      Min:=Matrix[i,j];
                                                       end;
                   end;
                 end;

          if Min=0 then begin
           writeln('Элементы массива - отрицательные!');
           readln;
           halt;
                        end;

writeln(' ':10,'Матрица');
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
  for j:=1 to n do begin
     if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
                                                    Min:=Matrix[i,j];
                                                    strok:=i;
                                                    stolb:=j;
                                                    end;

>>>>Зачем разделять проверку на наличие элемента больше 0 и нахождение наименьшего из найденных элементов больше 0??? Лишние строки кода, ибо можно было сделать так:

{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
  for j:=1 to n do begin
     if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
                                                    Min:=Matrix[i,j];
                                                    strok:=i;
                                                    stolb:=j;
                                                    end;
if Min=0 then begin
           writeln('Элементы массива - отрицательные!');
           readln;
           halt;
                        end;
__________________________________________________
for i:=1 to n do begin
  for j:=1 to n do begin
              if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
                      Min:=Matrix[i,j];
                                                       end;
                   end;
                 end;
__________________________________________________
ИМХО - лишнее.

2.
for i:=1 to n do begin
    for j:=1 to n do begin
    {================= Определяем и записываем строки}
             if i=strok then begin
                             inc(ii);
                             strMas[ii]:=Matrix[strok,j];
                            end;

    {================= Определяем и записываем столбцы}
             if j=stolb then begin
                             inc(jj);
                             stbMas[jj]:=Matrix[i,stolb];
                             end;
                     end;
                    end;

>>>>А зачем инкапсуляция? (вернее даже вообще нужно использование ii???) И зачем делать ставить условие на равенство i и strok,stolb? Мы уж знаем индексы элемента. Лишнее действие...

3. При включеном randomize; числа при генерации будут ВСЕГДА разными. Если randomize не прописан, то числа одинаковые при каждом запуске программы ;) Зачем вообще код такой по генерации? Зачем изобретать велосипед? Вот эти операции с корнями и проч.... не понимаю...




СОББСНО, ВОПРОС КО ВСЕМ: ПОЧЕМУ НЕ УСТРОИЛ КОД МОЕЙ ПРОГРАММЫ?:) Где в нем ошибка и зачем такое бессмысленное количество строк кода? Все просто и не надо усложнять жизнь ;)
Пису пис ;)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 24.01.07, 08:17:31
Идею я понял.. язык - турбопаскаль.. а вот как эту  идею в жизнь воплотить?
uses Crt;
var
a:array[1..10,1..10] of Integer;
im,i,j:Byte;
mm,m:Integer;
begin
ClrScr;
for i:=1 to 10 do
  for j:=1 to 10 do
     begin
       Write('Введите элемент массива ',i,',',j,': ');
       Read(a[i,j]);
     end;
for i:=1 to 10 do begin
 m:=0;
  for j:=1 to 10 do
     begin
       m:=m+a[i,j];
       
     end;
 if m>mm then begin
                       mm:=m;
                       im:=i;
                    end;
                        end;
WriteLn('Сумма элементов: ', m);
WriteLn('Номер строки: ',im);
for j:=1 to 10 do Write(a[im,j]:3);
ReadKey;
end.

ПыСы. Чот я жоско так 10х10 массив забил  [[china]]  <:/
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Sht?ih(S_РФ) от 24.01.07, 18:55:54
Спасибо , Faust! теперь врубился..
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 24.01.07, 19:23:49
Спасибо , Faust! теперь врубился..
Не за что =)
Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: LEND от 24.01.07, 21:19:47
Faust
Я сейчас перепесал и запустил твой код
и вот что получил.
Твой код указан в твоем посту. Я его и взял.

================== Трехмерная матрица ================
1 пример
 51  3 72
 71 33 71               Наименьшее число 3 1строка, 2 столбец
 72 44 30                        1 строка  - 51 3  72
                                 2 столбец - 3  33 44
  3 33 44
 71  3 71                        Должно быть
 72 72 30                        по строке    -  33 3 44                       
3 || 1:2                         по столбцу   -  3 51 72                                       

                                 Получаем при замене
                                 по строке    -  3 33 44 - это правильно
                                 а по столбцу    33 3 72
 
                                 где число 51
                                 Причем если ты не оставляешь на месте
                                 наименьшее число - значит затираешь цифру 
     

2 пример
 95 85 22
 15 75 10               Наименьшее число 10  2строка, 3 столбец           
 27 60 62                        2 строка  - 15 75 10                   
                                 3 столбец - 22 10 62                   
 95 85 15                                                               
 22 10 62                        Должно быть                             
 27 60 10                        по строке    -  15 10 75 
10 || 2:3                        по столбцу   -  22 62 10                 
                                                                         
                                 Получаем при замене                     
                                 по строке    -  22 10 62 - это правильно               
                                 а по столбцу    15 62 10                 
                                                                         
                                 где число 75 

                                 Опять же если ты не оставляешь на месте
                                 наименьшее число - значит затираешь цифру 

================== Четырехмерная матрица ================
 64 30 95 89
 78 25 44 59
  3 62 54 23
 29 89 63 41
                       Наименьшее число 3  3строка, 1 столбец           
  3 30 95 89                    3 строка  -  3 62 52 23                     
 62 25 44 59                    1 столбец - 64 78  3 29                   
 54 78  3 29                                                             
 23 89 63 41                    Должно быть                             
3 || 3:1                        по строке    -  3 64 78 29                 
                                по столбцу   -  62 54 3 23                 
                                                                         
                                Получаем при замене                     
                                по строке    -  54 78  3 29 
                                а по столбцу     3 62 54 23                 
                                                                         
                                где число 64                             
                                                                         
                                Опять же если ты не оставляешь на месте 
                                наименьшее число - значит затираешь цифру


 49 31 42 60
 98  2 35 93
  1  6 59 82
  9 42 77 39

  1 31 42 60
  6  2 35 93
 59 98  1  9
 82 42 77 39
1 || 3:1

И так большинство матриц
Я не проверял выше, но думаю что то же так будет.
И как ты думаешь?
Но в матрице вместе с положительными цифрами могут быть и отрицательные.
И как ты на это смотришь.
Но ты сделал работу. Ты должен сам разобраться в своем коде. Скажу только одно. Твоя ошибка заключается в том, что ты не понял что наименьшее положительное число не должно перемещаться, а должно находится на том же месте.
Поэтому твой код неверен, где - должен разобраться сам. Посиди и подумай.
Но я знаю - ты парень граммотный и решишь эту задачу. Я уверен что ты с этим справишься.
И у меня не всегда получается. Поэтому прежде чем показывать код, я его тщательно проверяю.

А насчет критики - каждый пишет так как может, лишь бы результаты были верны.
С уважением
LEND

2Sht?ih(S_РФ)
 Я также предлагаю свое решение задачи
 Вчера эту задачу не увидел, т.к. прочитал не все посты в этой ТЕМЕ.
 Заметил только сейчас. Сел и написал тем боле что задачка уж очень легкая.
 Я написал 3 способа решения, но так Faust уже дал решение я приведу один из них
uses crt;
const
 nstr=2; {Кол. строк в матрице}
 nstb=3; {Кол. столбцов в матрице}
var
 i,j: integer;                                        {счетчики}
 Max:integer;                                      {Максимальная сумма в матрице по строкам}
 s,st:integer;                                      {s-сумма по строке, st - строка}
 Matrix:array[1..nstr,1..nstb] of integer;  {Массив матрицы A}
BEGIN
ClrScr;
if (nstr=1) or (nstb=1) then begin
writeln('Недопустимое число для составления матрицы');
            halt;
            end;

{=========== Ручной ввод с клавиатуры в матрицу A(nstr,nstb) ==========}
writeln(' ':10,'Матрица A');
for i:=1 to nstr do begin
  for j:=1 to nstb do begin
  write('Введите элементы строки ',i,' в матрицу A(',nstr,',',nstb,') ->');
  read(Matrix[i,j]);
                      end;
                    end;
writeln('Продолжение - ENTER(ВВОД)');
readln;

{=== Вывод элементов матрицы на дисплей =========}
for i:=1 to nstr do begin
  for j:=1 to nstb do begin
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
                      end;
                writeln;
                    end;
writeln('Количество строк -> ',nstr);
writeln('Количество столбцов -> ',nstb);
writeln(' ---------------------------');


{=== Запись Максимальной суммы и строки ======}
for i:=1 to nstr do begin
                s:=0;
  for j:=1 to nstb do begin
                   s:=s+Matrix[i,j];
                   end;
           writeln('Строка матрицы -> ',i,' сумма по строке -> ',s);

                   if i=1 then begin
                                Max:=s;
                                st:=i;
                               end
                               else begin
        if Max<s then begin
            Max:=s; {Максимальная сумма в матрице по строке}
            st:=i;       {Строка матрицы где найдена максимальная сумма}
                      end;
                                    end;
                 end;
writeln('Максимальная сумма матрицы A=',Max,' находится в строке ',st);
writeln('Продолжение - ENTER(ВВОД)');
readln;
END.

Название: Re:ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Fаust от 24.01.07, 22:55:25
2LEND, те пропадающие элементы пропадают по той причине, что сначала я забиваю в новой матрице столбец, а потом строку=) Если сделать наоборот - теряться будет элемент из строки первичной матрицы =) В задании указано поменять местами, про сохранение элемента ничего не сказано. Как вариант - подставлять по уже имеющимся координатам минимального элемента сам этот элемент, то есть возвращать его на место И ВСЕ РАВНО=) Будем терять элементы. А почему? А потому что при такой замене адресация тоже меняется и i <> j. Не потерять ни одного элемента можно лишь тогда, когда эти элементы лежат на главной и побочной диагонали, о чем писал mr Doctor ...

По поводу задачи 2, что-то не учел, что матрица может быть и не квадратной=)

ПыСы. Приятно пообщаться с адекватным, грамотным человеком=)
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: ONLINE от 12.10.07, 00:31:08
уххх скоко темка не обновлялась....

прощу помощи! на ночь глядя:
надо пощитать y=(ctg|a|)^(1/7)
знаю что где-то тупо накосячил,но изза того что точно не знаю функцию экспоненты,разобрацо не могу...

program lab;
var x,y,a:real;
begin
writeln('Вводим число');
readln(x);
a:=(x/2)+(x*x/4)+(x*x*x/8);
y:=EXP(Ln (cos(abs(a)))/(sin(abs(a))))*7);
writeln(y);
readln;
end.
если добавить библиотеку crt то изначально выдает деление на ноль...
а так вроде считает но только с целыми значениями,хотя интежер не стоят...
есть мысль дописать еще условие if (a>0) then y:=EXP(ln(ctg(a))*7)
тогда еще раз присвоение делать...
скажите точно мне синтаксис эспоненты мб там деление...=\

надеюсь на Вашу помощь,спасибо:)
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: _Atheist_ от 12.10.07, 09:38:43
Насколько мне помнится, в библиотеке CRT бага деления на ноль в турбопаскале возникает на всех компах быстрее 486. Посмотри вот здесь (http://www.i2r.ru/static/376/out_10922.shtml)
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Wizard от 12.10.07, 16:53:20

прощу помощи! на ночь глядя:
надо пощитать y=(ctg|a|)^(1/7)
a:=(x/2)+(x*x/4)+(x*x*x/8);

y:=EXP(Ln (cos(abs(a)))/(sin(abs(a))))*7);
скажите точно мне синтаксис эспоненты мб там деление...=\


Умножение там. Но степень 1/7, значит надо умножать на 1/7 или делить на 7! Да и со скобками непорядок (лишние)
Т.е.
y:=exp(ln(cos(abs(a))/sin(abs(a)))/7);

Проверку на а<0 не нужно, там abs есть, а на а=0 сделать можно - там у функции разрыв.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: LEND от 12.10.07, 18:21:28
ONLINE

   y=(ctg|a|)^(1/7)
Это степенная функция.
Функция возвращает значение ctg|a| в степени 1/7 при ctg|a|
  или EXP((1/7)*Ln(ctg|a|)
  или EXP((1/7)*Ln(cos|a|/sin|a|)
Правильно ОНА пишется программно на ПАСКАЛЕ
y:=EXP((1/7)*Ln(cos(abs(a))/sin(abs(a))));

А вот тут WIZARD правильно написал:
Проверку на а<0 не нужно, там abs есть, а на а=0 сделать
можно - там у функции разрыв.
Возникает ошибка 200(Divizion by zero) - деление на нуль

Программа выглядит так:

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
program lab;
{uses crt;}
var x,y,a:real;
begin
writeln('Вводим число');
readln(x);
a:=(x/2)+(x*x/4)+(x*x*x/8);
a:=(x/2)+EXP(2*ln(x))/4+EXP(3*ln(x))/8; {Можно так}

(*a:=0 {Если хочешь разделить на ноль и УВИДЕТЬ номер ошибки 200 и сообщение}*)

(*y:=EXP(Ln(cos(abs(a)))/(sin(abs(a))))*7); {Неправильно}*)

y:=EXP( (1/7)* Ln(  cos(abs(a))/sin(abs(a)) )); {Правильно}

writeln(y:10:5);
readln;
end.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Без CRT
При
     10 - 0.92000
     11 - 0.91965
     12 - 1.13570
     14 - 1.77897
     ..........
     20 - 0.93339
с CRT то же самое
   
При некоторых значениях  ВВОДА x
возникает ошибка 207(Invalid floating point operation)
 Недопустимая операция с плавающей запятой
 Возможна причина:
 Аргумент функции LN(логарифм) равен нулю или имеет отрицательное значение
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: ONLINE от 12.10.07, 20:49:45
LEND , Wizard и _Atheist_ ОГРОМНЕЙШЕЕ СПАСИБО! 

разобрался вроде  :-:)
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Operator007 от 20.11.07, 23:54:27
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 21.11.07, 01:13:36
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
Задачу та сделать можно. Но вот странно. У тебя "а" начинается с индексом 0 и заканчивается 0... Хотя ты уменьшаешь n на -1. И от куда брять значения q и S? Я так понимаю это геометрическая последовательность?
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Operator007 от 21.11.07, 01:17:30
Люди добрые помогите решить задачку.
Текст задачки в прикрепленом файле
Задачу та сделать можно. Но вот странно. У тебя "а" начинается с индексом 0 и заканчивается 0... Хотя ты уменьшаешь n на -1. И от куда брять значения q и S? Я так понимаю это геометрическая последовательность?
тоже смутило это обстоятельство,завтра подойжу-узнаю точно, а q и S вводить с клавиатуры
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Operator007 от 21.11.07, 16:44:17
прояснил ситуацию, как мне сказали "а" нулевое в конце получается путем "а" с индексом n-n, а это 0
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Operator007 от 21.11.07, 20:21:01
ну хто поможет, к завтра нуна
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Evgee от 21.11.07, 22:13:04
Очень прошу помогите решить задачу...
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 21.11.07, 22:40:55
Ну вроде работает. Задача для Оператора007. Кстати, не вводи "к" больше 100... Там массивы всего на 100 элементов.

program Z1;
uses CRT;
var
 a,b: array [1..100] of real;
 q,s,j, sum: real;
 k1,k2: integer;
begin
 clrscr;
 write('Введите S: ');
 readln(s);
 write('Введите j: ');
 readln(j);
 write('Введите q: ');
 readln(q);
 write('Введите количество эдементов (k): ');
 readln(k1);
 writeln;
 k2:=1;
 a[k2]:=1;
 b[k2]:=1;
 repeat
  k2:=k2+1;
  a[k2]:=q*sin(b[k2-1])+s*cos(a[k2-1]);
  b[k2]:=j*sqr(a[k2-1])+b[k2-1];
 until k2>k1;
 k2:=1;
 sum:=sum+a[k1]*b[k2];
 repeat
  k1:=k1-1;
  k2:=k2+1;
  sum:=sum+a[k1]*b[k2];
 until k1=0;
 writeln;
 writeln ('Сумма: ',sum:4:2);
 readln;
end.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Operator007 от 21.11.07, 22:53:37
Ну вроде работает. Это первая задача.


спасибо большое=) у мя походу паскаль глюченый ошибку выдает Range chek error :'(
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 21.11.07, 22:56:38
Ну вроде работает. Это первая задача.


спасибо большое=) у мя походу паскаль глюченый ошибку выдает Range chek error :'(
Не знаю че у тебя за косяк, но я задачу прямо с форума в паскаль засунул, все работает, косяк только с кодировкой русского теста.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: BERKYT от 22.11.07, 09:23:21
Очень прошу помогите решить задачу...
тут вообщем то не сложно..главное формулы помнить..а я позабыл :-o
недавно что-то типо того решал...
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Kook от 22.11.07, 14:11:58
Поздно приеду сегодня! Лови ответ!

Цитировать
program Project1;
const
  x=2828.4E-3;
  y=4.1093;
  z=-7*sqrt(pi)/9.5;

var
  a,b,q:real;

begin
//x^y=exp(y*ln(x));
//Arccos(z)=-i*Ln(z+sqrt(z^2-1));
a:=(1+y)*(x*exp(1/2.5*ln(x+3))+(y/(x*x+4)))/(exp(-x-2)+1/(x*x+4));
b:=(1+cos(a+2))/(x*x*x*x/2+sqr(sin(z)));
q:=ln(abs(a+sqrt(b)));
q:=ln(q+sqrt(q*q-1));
writeln('-i *',q);
end.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: ANtZ [[devil]] RгоDkA от 22.11.07, 14:54:28
Насколько мне помнится, в библиотеке CRT бага деления на ноль в турбопаскале возникает на всех компах быстрее 486. Посмотри вот здесь (http://www.i2r.ru/static/376/out_10922.shtml)
только до целиков... можно использовать double тогда нормально пашет)
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Дюна от 05.12.07, 19:18:23
помогите пожалуйста с задачками
в задачах (кроме номера 8 ) сначала дается общее условие, а в конце уже конкретная задача.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 07.12.07, 22:24:06
помогите пожалуйста с задачками
в задачах (кроме номера 8 ) сначала дается общее условие, а в конце уже конкретная задача.
помогите, плииз, хотя бы по одной с каждого листа.. или просто одну
А теперь красавицы, напишите хотя бы по одной задачи с каждого листа печатным текстом... А то трудно подобрать ключ расшифровки к вашиму шрифту.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Дюна от 09.12.07, 11:53:26

Составить подпрограмму, вычисляющую значение TRUE,если количество положительных элементов исходного одномерного массива больше количества его отрицательных элементов и значение FALSE в противном случае.
Если количество положительных элементов в заданном массиве В больше, чем отрицательных, подсчитать сумму индексов положительных элементов, иначе определить сумму отрицательных элементов

В=(2,5; -0,006; 45,92; 0; 2,74; -15; 51,7)


Задача 8

Создать функцию, вычисляющую количество строк матрицы А, состоящей из m строк и  n столбцов, сумма элементов каждой из которых меньше нуля. Использовать функцию для вычисления указанных  величин в следующих 2х матрицах: матрице С из 4х строк и 5 столбцов и матрице D  из 5 строк и 3 столбцов


Задача 9

Составить процедуру, формальными параметрами которой являются 2 массива В1,В2,?Вn;С1,С2,Сm либо один из них, или матрица А  из n строк и  n  столбцов.
Составленную процедуру использовать в основной части программы для обработки фактических массивов или матрицы.
Массив Р1,Р2,?Рn    Рi=1,если в  i-той строке матрицы А положительных элементов больше, чем отрицательных, иначе Рi=0


Задача 10

Разработайте программу, создав предварительно функцию или процедуру по условию задачи. Приведенные числа используйте для задания, типов данных и размеров массивов при вводе-выводе

Составить подпрограмму нахождения индексов максимального элемента матрицы. Используя такую подпрограмму найти скалярное произведение строки на столбец заданной квадратной матрицы В с номерами, соответственно равными  индексам ее максимального элемента


                     -0,0004     2,5           6,21
В=                19              -45,1       0
                     -2,75         5,7           12,9


Составить процедуру, формальными параметрами которой являются 2 массива В1,В2,?Вn;С1,С2,Сm либо один из них, или матрица А  из n строк и  n  столбцов.
Составленную процедуру использовать в основной части программы для обработки фактических массивов или матрицы.
Массив Р12,Р2,?Рm полученный из массива С1,С2,?Сm по правилу (формула с суммой на первом листе, хз как напечатать)


Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 09.12.07, 17:00:14
Сама первая задача для Дюны.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Wait от 09.12.07, 20:45:16
Знаю,что элементарщина,но в паскале 0 [[0]]

1)Известен процент преступлений за предыдущий и последующие годы. За предыдущий год процент колеблется от 5 до 20,а последующий от 10 до 25. Вывести на экран город с наименьшим количеством преступлений и с наибольшим

2)Известны данные о выпуске продукции 5 предприятий за 10 лет. У какого предприятия максимальный выпуск продукции за 10 лет. В каком году у каждого предприятия был максимальный выпуск продукции (интервал от [30..80]

Зы: Хотя бы 1 до вторника  :-\
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Nimak от 09.12.07, 23:26:19
Задаяа ?2 для Wait. Вроде работает.
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Mess от 24.05.08, 23:36:20
(Раз тема не закрыта. Продолжу.)
Помогите пожалуйста. Чтобы сдать экзамен надо решить задачу в ТП :(
Сама в этом плохо разбираюсь.
Вот условие задачи:
Задача 3 ?Автомобиль преступников?.
Брауну, Джонсу и Смиту предъявлено обвинение в соучастии в ограблении банка. Похитители скрылись на поджидавшем их автомобиле. На следствии Браун показал, что преступники скрылись на синем ?Бьюике?; Джонс сказал, что это был чёрный ?Крайслер?; Смит утверждал, что это был ?Форд Мустанг?, но ни с коем случае не синий. Стало известно, что, желая запутать следствие, каждый из них указал правильно либо марку автомобиля, либо её цвет. Какой марки и какого цвета был автомобиль?
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: K@TZZ0!!! от 25.05.08, 00:11:46
(Раз тема не закрыта. Продолжу.)
Помогите пожалуйста. Чтобы сдать экзамен надо решить задачу в ТП :(
Сама в этом плохо разбираюсь.
Вот условие задачи:
Задача 3 ?Автомобиль преступников?.
Брауну, Джонсу и Смиту предъявлено обвинение в соучастии в ограблении банка. Похитители скрылись на поджидавшем их автомобиле. На следствии Браун показал, что преступники скрылись на синем ?Бьюике?; Джонс сказал, что это был чёрный ?Крайслер?; Смит утверждал, что это был ?Форд Мустанг?, но ни с коем случае не синий. Стало известно, что, желая запутать следствие, каждый из них указал правильно либо марку автомобиля, либо её цвет. Какой марки и какого цвета был автомобиль?

Я чего то не особо пойму причем тут эта задача и турбо паскаль?
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: LEO от 25.05.08, 00:43:44
если Смит сказал, что машина была не синяя, и Джонс сказал, что она черная, т.е. тоже не синяя, значит Браун нагнал про синий цвет. (т.е. авто было черное, т.к. других цветов в задаче не дано), а т.к. он нагнал про цвет, то значит назвал правильную марку. т.е. Бьюик.

вот такая картинка пришла в голову (буквы по строчкам - авто, по столбцам - цвет)

    Б    К   М
С  СБ СК  СМ
Ч  ЧБ ЧК  ЧМ
Ч  ЧБ ЧК  ЧМ

не знаю зачем, правда... ))

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

т.о. делаем полный перебор (2 вложенных цикла), и в теле вложенного цикла смотрим, насколько элемент отличается от каждого диагонального. если отличие только одно - решение найдено.  [[happy]]

... эх... Сказал бы Смит, что мустанг был красный, гугляли бы все трое на свободе)))
Название: Re: ПОМОГИТЕ С ПАСКАЛЕМ!!!
Отправлено: Mess от 25.05.08, 02:39:40
если Смит сказал, что машина была не синяя, и Джонс сказал, что она черная, т.е. тоже не синяя, значит Браун нагнал про синий цвет. (т.е. авто было черное, т.к. других цветов в задаче не дано), а т.к. он нагнал про цвет, то значит назвал правильную марку. т.е. Бьюик.

вот такая картинка пришла в голову (буквы по строчкам - авто, по столбцам - цвет)

    Б    К   М
С  СБ СК  СМ
Ч  ЧБ ЧК  ЧМ
Ч  ЧБ ЧК  ЧМ

не знаю зачем, правда... ))

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

т.о. делаем полный перебор (2 вложенных цикла), и в теле вложенного цикла смотрим, насколько элемент отличается от каждого диагонального. если отличие только одно - решение найдено.  [[happy]]

... эх... Сказал бы Смит, что мустанг был красный, гугляли бы все трое на свободе)))
Там надо написать типа: если СИНИЙ-то не Бьюик, если Черный- то не Крайслер, если синий -то мустанг ( что-то такое кажется).
как это  записать в програме, чтобы она выдавала правильный ответ....