Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Botsman
Статус: Практикант
Рейтинг: 150
∙ повысить рейтинг >>
Тимошенко Дмитрий
Статус: 9-й класс
Рейтинг: 108
∙ повысить рейтинг >>
Micren
Статус: Практикант
Рейтинг: 34
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 875
от 08.05.2009, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 257, Экспертов: 46
В номере:Вопросов: 3, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 166316: Здравствуйте, уважаемые эксперты, очень надеюсь, что вы поможете в решении этой задачи - необходимо написать программу на языке Turbo Pascal. Суть задачи заключается в следующем - Даны несколько отрезков различной длины и две точки с координатами (x1...


Вопрос № 166369: Дан двумерный массив размерностью 4x6, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен пер¬вому четному элементу соответствующей строки, если такого нет, то равен нулю. помогите пожалуйста. пр...
Вопрос № 166370: Здравствуйте, уважаемые эксперты. Очень вас прошу напишите пожалуйста комментарии к программе, реализующей игру "Сапер". Они там есть, просто нужны более подробные, потому что программа очень для меня сложная и многих условий и решени...

Вопрос № 166.316
Здравствуйте, уважаемые эксперты, очень надеюсь, что вы поможете в решении этой задачи - необходимо написать программу на языке Turbo Pascal. Суть задачи заключается в следующем - Даны несколько отрезков различной длины и две точки с координатами (x1, y1) и (x2, y2). Необходимо построить ломанную, звенья которой могут располагаться только параллельно осям координат, соединяющую эту пару точек, или вывести и сообщение, о том, что это сделать невозможно. Решение, продемонстрировать графически.
Отправлен: 02.05.2009, 19:41
Вопрос задал: Monoxpom (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Monoxpom!

Смотрите приложение. Программа поочередно изменяет координату Х или У, и после суммирования длин всех отрезков проверяет совпадает ли конечная точка. Если совпала то показывает решение. Также проверяется правило ломаной = соседние отрезки не должны лежать на одной прямой. Сожалею, но не проверяется моменты, если отрезки имеют больше одной общей точки или общие начало и конец отрезков, поэтому иногда показываются замкнутые области.
Эксперементировал с А=1:1,В=3:7 и отрезками длиной: 2,1,2,1,2; 2,1,1,1,2,1,1,1,2; все по 3; 1,2,3,4,1,2,1,2.
Вопросы задавайте в мини-форум.
Удачи Вам.

Приложение:

Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
----
Ответ отправлен: 05.05.2009, 20:41

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 248683 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 166.369
    Дан двумерный массив размерностью 4x6, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен пер¬вому четному элементу соответствующей строки, если такого нет, то равен нулю.
    помогите пожалуйста. проблема в том, что берется последний четный элемент каждой строки, а нужно первый.
    вот код:
    program name;
    uses crt;
    label 1;
    var a:array [1..2,1..2] of integer; c:array [1..6] of integer; i,j,k,x:integer;
    begin
    clrscr;
    for i:=1 to 2 do begin
    for j:=1 to 2 do begin
    readln(a[i,j]);
    end;
    end;
    for i:=1 to 2 do begin
    for j:=1 to 2 do begin
    write (a[i,j], ' ');
    end;
    writeln;
    end;
    x:=1;
    for i:=1 to 2 do begin
    for j:=1 to 2 do begin
    end;
    if a[i,j] mod 2=0 then begin c[x]:=a[i,j];{inc(x);} end;
    end;
    writeln;
    for j:=1 to 2 do
    write(c[j],' ');
    end.

    в чем недочет? как сделать правильно?
    Отправлен: 03.05.2009, 16:45
    Вопрос задала: Борисова Екатерина Андреевна (статус: Посетитель)
    Всего ответов: 2
    Мини-форум вопроса >>> (сообщений: 0)

    Отвечает: Тимошенко Дмитрий
    Здравствуйте, Борисова Екатерина Андреевна!

    Добавьте в ваше условие проверки на четность оператор break
    т.е. должно быть так if a[i,j] mod 2=0 then begin c[x]:=a[i,j]; inc(x); break; end;
    Да, и условие конечно же должно быть на строку выше, внутри цикла по j.

    В этом случае первый же найденный четный элемент прервет цикл по строке и запомнит его в массиве. А по выходу из цикла по j вам нужно проверять, например, с помощью вашей переменной x был ли найден четный элемент и если нет, то добавлять в массив 0. Например так if x=i then begin c[x]:=0; inc(x); end; Надеюсь понятно, изъяснил. Вопросы в форум.
    Ответ отправил: Тимошенко Дмитрий (статус: 9-й класс)
    Ответ отправлен: 03.05.2009, 20:44

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 248588 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Отвечает: Victor Pyrlik
    Здравствуйте, Борисова Екатерина Андреевна!

    не очень понятно условие - найти четный элемент в строке и перейти на другую, или взять первый элемент в строке и проверить его на четность?
    т.е. если надо найти первый элемент в строке - достаточно пройти в цикле (одном) 4 итерации - просмотреть все первые элементы каждой строки.
    Если надо в каждой строке найти четный (первый который встретится) элемент занести в массив и если нет в этой строке такого элемента то занести 0 и просмотреть следующую строку..

    В любом случае, размеры массивов у вас не верны.
    для массива 4 x 6 это будет a:array [1..4,1..6] of integer т.к. у нас 4 строки по 6 элементов в каждой строке.
    тогда, массив с = array[1..4] of integer т.к. всего по одному элементу может быть с каждой строки а строк всего 4

    вот код для обоих вариантов, там 2 процедуры которые вызываются последовательно.. т.е. вводим 4 числа и нажимаем Enter
    примерно так:
    1 2 2 4 5 6 <Enter>
    2 5 6 8 4 7 <Enter>
    и так 4 раза для формирования массива 4 х 6
    Код:

    program name;
    uses crt;
    {Дан двумерный массив размерностью 4x6, заполненный целыми числами с клавиатуры.
    Сформировать одномерный массив, каждый элемент которого равен пер¬вому четному элементу
    соответствующей строки, если такого нет, то равен нулю.
    помогите пожалуйста. проблема в том, что берется последний четный элемент каждой строки, а нужно первый.}

    var
    a:array [1..4,1..6] of integer; // 4 строки по 6 чисел в каждой строке
    c:array [1..4] of integer;
    i,j:integer;
    s:string;
    // для первого варианта --------------------------------------------------------
    procedure Solve1;
    begin
    for i:=1 to 4 do
    begin
    for j:=1 to 6 do
    begin
    read(a[i,j]);
    end;
    end;
    writeln('--------------------');
    for i:=1 to 4 do
    begin
    if a[1,i] mod 2=0 then
    c[i]:=a[1,i]
    else
    c[i]:= 0;
    end;
    writeln;
    for j:=1 to 4 do
    write(c[j],' ');
    readln(s);
    end;
    // для второго варианта -------------------------------------------------------
    procedure Solve2;
    begin
    for i:=1 to 4 do
    begin
    for j:=1 to 6 do
    begin
    read(a[j,i]);
    end;
    end;
    writeln('--------------------');
    for i:=1 to 4 do
    begin
    for j:= 1 to 6 do
    begin
    if a[j,i] mod 2=0 then
    begin
    c[i]:=a[j,i];{inc(x);}
    break;
    end
    else
    c[i]:= 0;
    end;
    end;
    writeln;
    for j:=1 to 4 do
    writeln(c[j]);

    end;
    // основная программа ----------------------------------------------------------
    begin
    clrscr;
    Solve1;
    writeln('--------------------');
    Solve2;
    writeln('--------------------');
    readln();
    end.


    ---------
    Жизнь игрушка – пока играешь сам..
    Ответ отправил: Victor Pyrlik (статус: Профессионал)
    Россия, Екатеринбург
    Тел.: 89043822027
    ICQ: 490191733
    ----
    Ответ отправлен: 03.05.2009, 22:35

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 248593 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 166.370
    Здравствуйте, уважаемые эксперты. Очень вас прошу напишите пожалуйста комментарии
    к программе, реализующей игру "Сапер". Они там есть, просто нужны более подробные,
    потому что программа очень для меня сложная и многих условий и решений я там
    не пониммаю. Заранее спасибо...

    Код:
    Program
    Mines;
    Uses CRT; {подключение библиотеки расширенного ввода-вывода}
    Const
    NR=10; NC=20; {размер поля NR строк и NC столбцов}
    NM=10; {количество мин}
    Type
    TMineMark=(mmClosed, mmOpened, mmMarked, mmSuspicious);
    TMineNumber=0..8; {количество мин}

    TFieldCell = Record {тип-запись описывает структурированные переменные}
    Mine : Boolean; {наличие мины}
    Mark : TMineMark; {отметка}
    Around : TMineNumbe r; {количество мин вокруг ячейки}
    End;

    TMineField=Array[1..NR,1..NC] of TFieldCell;
    {поле, состоящее из NR-строк и NR-столбцов}
    Var
    Field:TMineField;
    X,Y,R:Integer;
    pc,sc:Char;
    {-----------------------------------------------------------------}
    Procedure InitField(var F:TMineField); {очистка игрового поля}
    Var i,j:Integer;
    Begin
    For i:=1 to NR Do
    For j:=1 to NC Do Begin
    {определение пустых ячеек по строкам и столбцам}
    F[i,j].Mine:=False; {отсутствует мина}
    F[i,j].Mark:=mmClosed; {нет отметок}
    F[i,j].Around:=0;
    {количество мин вокруг ячеек равно 0, поэтому очищаем игровое поле}
    End; {закрытие цикла}
    End;
    {-----------------------------------------------------------------}
    Procedure FillMines(var F:TMineField); {расстановка мин}
    Var i,j,k,m:Integer;
    Begin
    For k:=1 to NM do Begin {при заданном количестве мин}
    m:=Random(NR*NC-k+1)+1;
    {определяем оставшееся к оличество ячеек,
    при этом расстановка мин ведется произвольно}
    For i:=1 to NR Do
    For j:=1 to NC Do {по строкам и столбцам}
    If Not F[i,j].Mine Then Begin {нет мины}
    m:=m-1; {переходим дальше}
    If m=0 Then F[i,j].Mine:=True;
    {мина в ячейке, поэтому условие истинно}
    End;
    End;
    End;
    {-----------------------------------------------------------------}
    Procedure CountAround(var F:TMineField);
    {считать количество мин вокруг ячеек}
    Var i,j,ii,jj:Integer;
    Begin
    For i:=1 to NR Do
    For j:=1 to NC Do
    If not F[i,j].Mine Then
    For ii:=-1 to 1 Do
    For jj:=-1 to 1 Do
    {обойти соседние ячейки}
    If (i+ii>=1) And (i+ii<=NR) And
    (j+jj>=1) And (j+jj<=NC) Then
    {если ячейка в пределах поля}
    If F[i+ii,j+jj].Mine Then
    F[i,j].Around:=F[i,j].Around+1;
    End;
    {--------------- --------------------------------------------------}
    Procedure OpenField(var F:TMineField; R,C:Integer); {открыть}
    Var i,j,ii,jj:Integer; Comp:Boolean;
    Begin
    If F[R,C].Mark=mmClosed Then F[R,C].Mark:=mmOpened;
    Repeat
    Comp:=True;
    For i:=1 to NR Do
    For j:=1 to NC Do
    If not F[i,j].Mine And (F[i,j].Mark=mmOpened)
    And (F[i,j].Around=0) Then
    For ii:=-1 to 1 Do
    For jj:=-1 to 1 Do
    If (i+ii>=1) And (i+ii<=NR) And
    (j+jj>=1) And (j+jj<=NC) Then
    If F[i+ii,j+jj].Mark<>mmOpened Then Begin
    F[i+ii,j+jj].Mark:=mmOpened; Comp:=False;
    End;
    Until Comp;
    End;
    {-----------------------------------------------------------------}
    Function GameResult(var F:TMineField):Integer;
    Var i,j,R:Integer; {надо ли заканчивать игру}
    Begin
    R:=1;
    For i:=1 to NR Do
    For j:=1 to NC Do
    If R>=0 Th en Begin
    If (F[i,j].Mark=mmClosed) And Not F[i,j].Mine Then
    R:=0; {Игру следует продолжить}
    If (F[i,j].Mark=mmOpened) And F[i,j].Mine Then
    R:=-1; {Игра проиграна}
    End;
    GameResult:=R;
    End;
    {-----------------------------------------------------------------}
    Procedure ShowGameField(var F:TMineField; ShowMines:Boolean);
    Var i,j:Integer;
    Begin
    Writeln;
    For i:=1 to NR Do Begin
    Writeln;
    For j:=1 to NC Do Begin
    Case F[i,j].Mark Of
    mmClosed: If Not ShowMines Or Not F[i,j].Mine Then
    Write('#') Else Write('*');
    mmOpened: If F[i,j].Mine Then Write('*')
    Else Begin
    If F[i,j].Around=0 Then Write(#32)
    Else Write(F[i,j].Around);
    End;
    mmMarked: Write('P');
    mmSuspicious: Write('?');
    End;
    End;
    End;
    Writeln;
    End;
    {-----------------------------------------------------------------}
    Begin {осн.пр.}
    Randomize;
    InitField(Field); FillMines(Field); CountAround(Field);
    ClrScr; ShowGameField(Field,False); X:=1; Y:=1;
    Repeat
    GotoXY(X,Y+2);
    pc:=ReadKey; sc:=#0; If pc=#0 Then sc:=ReadKey;
    If pc<>#0 Then Begin
    case pc of
    #13: OpenField(Field,Y,X);
    #32: Case Field[Y,X].Mark of
    mmClosed: Field[Y,X].Mark:=mmMarked;
    mmMarked: Field[Y,X].Mark:=mmSuspicious;
    mmSuspicious: Field[Y,X].Mark:=mmClosed;
    End; End;
    ClrScr; ShowGameField(Field,false);
    End;
    Case sc Of
    #75: If X>1 Then X:=X-1; #77: If X<NC Then X:=X+1;
    #72: If Y>1 Then Y:=Y-1; #80: If Y<NR Then Y:=Y+1;
    End;
    R:=GameResult(Field);
    Until (R<>0) Or (pc=#27);
    GotoXY(1,20);
    If R=1 Then Writeln(‘Вы выиграли’);
    If R=-1 Then Begin
    ClrScr; ShowGameField(Field,True);
    Writeln (‘Вы проиграли’);
    End;
    End.
    Отправлен: 03.05.2009, 16:46
    Вопрос задал: Судейкин Андрей Владимирович (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 3)

    Отвечает: Тимошенко Дмитрий
    Здравствуйте, Судейкин Андрей Владимирович!

    Может так будет более понятно.
    Если возникнут затруднения - пишите в форум.

    Приложение:

    Ответ отправил: Тимошенко Дмитрий (статус: 9-й класс)
    Ответ отправлен: 05.05.2009, 07:24

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 248650 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!

    Оценка за ответ: 1


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное