Задача на паскале(нужна помощь)

Тема в разделе "Другие языки", создана пользователем rider1203, 26 сен 2011.

Модераторы: Цукер
  1. rider1203

    rider1203

    Регистр.:
    4 авг 2008
    Сообщения:
    242
    Симпатии:
    58
    Условие задачи:
    На плоскости задан квадрат со сторонами, параллельными осям координат. Вычислить площадь квадрата, принадлежащую 4 четверти.
    Я сделал так
    Код:
    var x1,x2,y1,y2,a,s:integer;
    label one,two;
    begin
    one:writeln('Введите координаты левой нижней точки квадрата через пробел');
    writeln('Пример: x=4,y=5 Вводить:4 5');
    readln(x1,y1);
    if (x1<0) or (y1>0) then begin
    writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
    goto one; end;
    two:writeln('Введите координаты правой верхней точки квадрата через пробел');
    readln(x2,y2);
    if (x2<0) or (y2>0) then begin
    writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
    goto two; end;
    a:=x2-x1;
    s:=sqr(a);
    writeln('Площадь квадрата равна ',s);
    readln
    end.
    но это не правильно(((
     
  2. ya-maker

    ya-maker Постоялец

    Регистр.:
    11 янв 2011
    Сообщения:
    60
    Симпатии:
    20
    [​IMG]
     
    rider1203 нравится это.
  3. rider1203

    rider1203

    Регистр.:
    4 авг 2008
    Сообщения:
    242
    Симпатии:
    58
    что-то не то(((
    нужно именно ту площадь,котая принадлежит 4ой четверти...
    квадрать может лежать хоть во всех четвертях
     
  4. BSunV

    BSunV

    Регистр.:
    8 окт 2008
    Сообщения:
    186
    Симпатии:
    45
    Понятно что не правильно. допустим х1=-4, а х2=3. в вашем алгоритме - a:=x2-x1, а это будет а:= 3 - (-4), а:=7. Хотя очевидно то, что это не правильно. Нужно внести оператор ветвления, который производит проверку на то, как расположен квадрат относительно осей координат. Таких вариантов может быть 4 (смотри рисунки ya-maker - он все предельно ясно обрисовал). Дальше - дело техники

    var x1,x2,y1,y2,a,s:integer;
    label one,two;

    begin
    one:writeln('Введите координаты левой нижней точки квадрата через пробел');
    writeln('Пример: x=4,y=5 Вводить:4 5');
    readln(x1,y1);

    if (x1<0) or (y1>0) then begin
    writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
    goto one; end;

    two:writeln('Введите координаты правой верхней точки квадрата через пробел');
    readln(x2,y2);

    if (x2<0) or (y2>0) then begin
    writeln('Квадрат не принадлежит 4 четверти,введите другие координаты');
    goto two; end;

    if ((x1<0) and (x2<0) and (y1<0) and (y2>0)) then {если ось Х проходит через квадрат а ось У не проходит}

    begin
    a:=x1-х2;
    s:=а*|y1|;
    end;


    if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если центр координат внутри квадрата}

    begin
    s:=x1*y1;
    end;

    if ((x1<0) and (x2>0) and (y1<0) and (y2>0)) then {если ось У проходит через квадрат а ось Х не проходит}

    begin
    a:= y1-y2
    s:=x1*a;
    end;

    if ((x1<0) and (x2<0) and (y1<0) and (y2<0)) then {если квадрат полностью в 4-ой четверти}


    begin
    a:=y1-y2;
    s:=a*a;
    end;


    writeln('Площадь прямоугольника в 4 четверти равна ',s);
    readln
    end.

    Понимаю что быдло-код, но работать должен. может где-то в синтаксисе ошибки - ссори, давно не кодил на Паскале. goto желательно не использовать - хоть данный оператор и присутствует в паскала использование его - признак дурного тона. старайтесь избегать - если goto в програме много ее очень трудно понять (прижки из конца кода в начало и еще бог знает куда)
     
    rider1203 нравится это.
  5. wal

    wal Постоялец

    Регистр.:
    24 мар 2008
    Сообщения:
    89
    Симпатии:
    30
    человек тебе все верно расписал...

    тебе терь нужно запрограммить алгоритм который на скане приведен и все будет как тебе нужно...
     
    rider1203 нравится это.
  6. BSunV

    BSunV

    Регистр.:
    8 окт 2008
    Сообщения:
    186
    Симпатии:
    45
    Если делать по уму, то нужно еще добавить проверку введенных данных (чтобы пользователь не ввел вместо цифр буквы). и проще будет сделать ввод левой нижней точки и длины стороны квадрата и по этим данным строить квадрат.
     
  7. rider1203

    rider1203

    Регистр.:
    4 авг 2008
    Сообщения:
    242
    Симпатии:
    58
    Если вместо цифр ввести букву,когда тип данных integer просто выкинет из программы.
    Спасибо,попробую)
     
  8. BSunV

    BSunV

    Регистр.:
    8 окт 2008
    Сообщения:
    186
    Симпатии:
    45
    И еще, что я упустил из виду. Зачем у вас две проверки введенных координат? Достаточно просто проверить левую нижнюю точку. если левая нижняя точка в 4-ой четверти ((x1<0)and(y1<0)), значит решаем, если нет - выводим соответствующее предупреждение.