motofan logo
> 

Помогите решить задачку по програмингу, +3 к репе дам)

K-E-N-N-Y
сообщение 5.3.2010, 16:14


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Изображение
Задание:
Даны действительные числа х и у.Определить,лежит ли точка с заданными координатами (х,у) внутри заштрихованной области.
Надо написать на Паскале или на Си,но лучше на паскале.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
2 страниц V  1 2 >  
Ответ в темуСоздание новой темы
Ответов(1 - 39)
A.Vas
сообщение 5.3.2010, 16:22


Гуру
******

Группа: Пользователи
Сообщений: 1 016
Регистрация: 2.12.2005
Из: г. Томск
Пользователь №: 60 511
Модель телефона: HTC One X
Прошивка: CyanogenMod 11

Рейтинг: 435



K-E-N-N-Y,
и что тут сложного? Проверяй для точек три условия, если выполняются все три - точка лежит в заштрихованной области:
1) abs(x) < 1, abs(y) < 1
2) x^2 + y^2 > 1
3) y > x

Условие 1 задаёт положение точки внутри внешнего (квадратного) края области, условие 2 - вне внутреннего круга, условие 3 - выше диагональной разделительной линии.

Сообщение отредактировал A.Vas - 5.3.2010, 16:24
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 5.3.2010, 16:38


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Цитата(A.Vas @ 5.3.2010, 16:22) *

K-E-N-N-Y,
и что тут сложного? Проверяй для точек три условия, если выполняются все три - точка лежит в заштрихованной области:
1) abs(x) < 1, abs(y) < 1
2) x^2 + y^2 > 1
3) y > x

Условие 1 задаёт положение точки внутри внешнего (квадратного) края области, условие 2 - вне внутреннего круга, условие 3 - выше диагональной разделительной линии.

эмм и как будет выглядеть?
writeln('введите координаты');
read(x,y)
if abs(x) < 1 and abs(y) < 1
а дальше как с другими условиями?
тупо также записать?
и почему второе условие именно такое?

Сообщение отредактировал K-E-N-N-Y - 5.3.2010, 16:39
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 16:43


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



второе условие - проверка на радиус (квадрат радиуса на самом деле) круга, расстояние от центра должно быть больше 1
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 5.3.2010, 16:43


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Цитата(K-E-N-N-Y @ Сегодня, 21:14)

Надо написать на Паскале или на Си,но лучше на паскале.
*


Я тя уверяю - лучше на Си ^__^

Вот по описанию A.Vas:
Код

if( (abs(x) <= 1) &&  // координата X лежит в промежутке [-1;1]
    (abs(y) <= 1) && // координата Y лежит в промежутке [-1;1]
    (x*x + y*y >= 1) && // точка за пределами единичной окружности
    (y > x) )
{
    printf("This point is in valid region.");
}
else
{
    printf("This point isn't in valid region.");
}


Сообщение отредактировал DmT - 5.3.2010, 16:44
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 16:47


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



var b: boolean;


writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=true else b:=false;
if ((x*x)+(y*y)) > 1 then else b:= false;
if y>x then else b:=false;

if b=true then writeln ('Попадает');

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


Добавлено позже (5.3.2010, 19:50):
на паскале писал 10 лет назад поэтому получилось так коряво... но должно работать

Или как вариант

var b: integer;


writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0;
if ((x*x)+(y*y)) > 1 then b:= b+1;
if y>x then b:= b+1;

if b=3 then writeln ('Попадает');

Добавлено позже (5.3.2010, 19:53):
кстати границы заштрихованной области входят в допустимую зону? если да, то надо условия смягчать во всех трёх проверках, допуская равенство.

Сообщение отредактировал AlexKooper - 5.3.2010, 16:54
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 5.3.2010, 16:57


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Цитата(AlexKooper @ 5.3.2010, 16:47) *

var b: boolean;
writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=true else b:=false;
if ((x*x)+(y*y)) > 1 then else b:= false;
if y>x then else b:=false;

if b=true then writeln ('Попадает');

либо через одно сплошное условие, но громозко получится - паскаль очень любит скобками всё чтоб обрамлено было, чтоб порядок операций задать.
Добавлено позже (5.3.2010, 19:50):
на паскале писал 10 лет назад поэтому получилось так коряво... но должно работать

Или как вариант

var b: integer;
writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0;
if ((x*x)+(y*y)) > 1 then b:= b+1;
if y>x then b:= b+1;

if b=3 then writeln ('Попадает');

Добавлено позже (5.3.2010, 19:53):
кстати границы заштрихованной области входят в допустимую зону? если да, то надо условия смягчать во всех трёх проверках, допуская равенство.

а почему if y>x then b:= b+1;
насчет границ не знаю, извините даже,в точности задание написал
вариант проги второй не работает...
у кого еще есть предложение готовой программы на паскале?
ту DmT,твой код чет тоже не хотел компилить
: warning C4700: использована неинициализированная локальная переменная "x"
warning C4700: использована неинициализированная локальная переменная "y"

Сообщение отредактировал K-E-N-N-Y - 5.3.2010, 17:02
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 16:59


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



Цитата
а почему if y>x then b:= b+1;

это же проверка третьего условия. за каждое выполненное условие начисляем 1 балл. Три условия выполнено (b=3) - значит все условия выполнены.

Сообщение отредактировал AlexKooper - 5.3.2010, 17:00
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 5.3.2010, 17:01


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



K-E-N-N-Y,
Эт еще повезло что не на прологе писать надо...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 17:02


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



это ещё повезло, что не в машинных кодах какого-нибудь z80 писать надо :) а то у нас в универе и такое было. причем никаких компов - бумажные таблицы перевода написанного от руки асм кода в хексы, и вбивать в стенд кнопочками...

Добавлено позже (5.3.2010, 20:05):
конечно не работает, надо же писать всякие бегины-енды, тело програмы, тип переменных X Y, подстегнуть модули ввода-вывода чтоб writeln readln работали... ты хоть ошибки пиши.

Добавлено позже (5.3.2010, 20:07):
как-то так

uses crt; {этот вроде какой-то стандарт. модуль для ввода-вывода}
var b: integer;
x,y: real;

begin
writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0;
if ((x*x)+(y*y)) > 1 then b:= b+1;
if y>x then b:= b+1;
if b=3 then writeln ('Попадает') else writeln ('Не попадает');

end.

Сообщение отредактировал AlexKooper - 5.3.2010, 17:14
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
A.Vas
сообщение 5.3.2010, 17:18


Гуру
******

Группа: Пользователи
Сообщений: 1 016
Регистрация: 2.12.2005
Из: г. Томск
Пользователь №: 60 511
Модель телефона: HTC One X
Прошивка: CyanogenMod 11

Рейтинг: 435



Цитата(AlexKooper @ Сегодня, 23:02)

это ещё повезло, что не в машинных кодах какого-нибудь z80 писать надо :) а то у нас в универе и такое было. причем никаких компов - бумажные таблицы перевода написанного от руки асм кода в хексы, и вбивать в стенд кнопочками...
*


О, да, мы тоже это делали в рамках курса "Микропроцессорные устройства". Только стенды были не на Z80, а, кажется, на МК48 :)

K-E-N-N-Y,
попробуй такой вариант. Предупреждаю сразу, на паскале не писал чуть больше трёх лет, а компилятора под рукой нет, поэтому могут быть синтаксические ошибки.
Код

var x, y: real;

BEGIN
    write("Введите координаты точки: ");
    read(x, y);

    if ((x < 1) and (y < 1))
            and (x*x + y*y < 1)
            and (y > x)
    then
        writeln("Точка попадает в заданную область.");
    else
        writeln("Точка не попадает в заданную область.");
END.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 17:20


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



Цитата
and (x*x + y*y < 1)

подозреваю что тут ругнётся, я бы записал так
and (((x*x) + (y*y)) < 1)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 5.3.2010, 17:20


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Цитата(DmT @ Сегодня, 23:01)

Эт еще повезло что не на прологе писать надо...
*


Как раз самая задача для Пролога.
Цитата(AlexKooper @ Сегодня, 23:02)

это ещё повезло, что не в машинных кодах какого-нибудь z80 писать надо :) а то у нас в универе и такое было. причем никаких компов - бумажные таблицы перевода написанного от руки асм кода в хексы, и вбивать в стенд кнопочками...
*


Собственно тоже проходил, но только не в универе - такой древности, как стенды на Z80, у нас нет
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 5.3.2010, 17:22


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Цитата(A.Vas @ 5.3.2010, 17:18) *

О, да, мы тоже это делали в рамках курса "Микропроцессорные устройства". Только стенды были не на Z80, а, кажется, на МК48 :)

K-E-N-N-Y,
попробуй такой вариант. Предупреждаю сразу, на паскале не писал чуть больше трёх лет, а компилятора под рукой нет, поэтому могут быть синтаксические ошибки.
Код

var x, y: real;

BEGIN
    write("Введите координаты точки: ");
    read(x, y);

    if ((x < 1) and (y < 1))
            and (x*x + y*y < 1)
            and (y > x)
    then
        writeln("Точка попадает в заданную область.");
    else
        writeln("Точка не попадает в заданную область.");
END.


ошибка вроде только одна,это то что ; перед else не пишется smile.gif
а так вроде все работает,с точки зрения математики программа правильно составлена?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 5.3.2010, 17:24


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



K-E-N-N-Y, а чегой эта у тебя ссылки в подписи не работают?


Добавлено позже (5.3.2010, 20:27):
с точки зрения математики - правильно, но если точка лежит на границе то будет писать что не попадает. если условия меньше (больше) заменить на меньше или равно (больше или равно) то граница войдёт в зону допуска
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 5.3.2010, 17:36


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Цитата(AlexKooper @ 5.3.2010, 17:24) *

K-E-N-N-Y, а чегой эта у тебя ссылки в подписи не работают?
Добавлено позже (5.3.2010, 20:27):
с точки зрения математики - правильно, но если точка лежит на границе то будет писать что не попадает. если условия меньше (больше) заменить на меньше или равно (больше или равно) то граница войдёт в зону допуска

Ааа,да подпись забыл отредактировать,там половина работает половина нет,а сайт я забросил свой,не хватает времени на него,да и труба у меня сейчас К790
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
A.Vas
сообщение 5.3.2010, 17:45


Гуру
******

Группа: Пользователи
Сообщений: 1 016
Регистрация: 2.12.2005
Из: г. Томск
Пользователь №: 60 511
Модель телефона: HTC One X
Прошивка: CyanogenMod 11

Рейтинг: 435



Цитата(K-E-N-N-Y @ Сегодня, 23:22)

с точки зрения математики программа правильно составлена?
*


Гм, нет, я забыл про модуль в 7 строке. Она должна выглядеть так:
Код
if ((abs(x) < 1) and (abs(y) < 1))
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 5.3.2010, 18:00


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



А разве точка с координатами 2 и 5 не должна лежать на заштрихованной области?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 5.3.2010, 18:29


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Цитата(K-E-N-N-Y @ Сегодня, 23:00)

А разве точка с координатами 2 и 5 не должна лежать на заштрихованной области?
*


Цитата(AlexKooper @ Сегодня, 21:47)

if abs(x) < 1 and abs(y) < 1 then
*




Капитан Очевидность намекает, что точка (2,5) неудовлетворяет условию...


Добавлено позже (5.3.2010, 23:34):
Цитата(motoprogger @ Сегодня, 22:20)

Как раз самая задача для Пролога.
*


Ну конечно её Прологом можно решить, равно как и гвоздь можно забить системником.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 6.3.2010, 5:22


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



а какая точка вообще будет находится на заштрихованной зоне?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andrew_71
сообщение 6.3.2010, 7:39


Ветеран
*****

Группа: Пользователи
Сообщений: 374
Регистрация: 9.6.2007
Из: Рио-де-Мясново / Прейсиш Эйлау
Пользователь №: 137 694
Модель телефона: ROKR_Z6
Прошивка: PE 1.86

Рейтинг: 279



Цитата(K-E-N-N-Y @ 6.3.2010, 8:22) *

а какая точка вообще будет находится на заштрихованной зоне?


(-0,99; 0,99)

Кстати, граничные точки, типа (-1; -1) БУДУТ принадлежать данной области. Иначе граница на графике была бы пунктирной.

Сообщение отредактировал Andrew_71 - 6.3.2010, 7:41
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
motoprogger
сообщение 6.3.2010, 8:33


Гуру
******

Группа: Разработчики
Сообщений: 1 327
Регистрация: 20.7.2006
Из: Г. Омск
Пользователь №: 92 049
Модель телефона: C380 и Talkabout
Прошивка: разные

Рейтинг: 510



Цитата(DmT @ Сегодня, 0:29)

Ну конечно её Прологом можно решить, равно как и гвоздь можно забить системником.
*


Нет, Пролог для решения такой задачи подходит лучше, чем системник для забивания гвоздей. Объявить, что точка обладает свойством 1, если между её координатами такое соотношение, и свойством 2, если другое. И проверять, обладает ли заданная пользователем точка двумя этими свойствами сразу
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Abram
сообщение 6.3.2010, 9:38


Прелесть какая гадость
*******

Группа: Разработчики
Сообщений: 1 963
Регистрация: 24.6.2005
Из: .ru - рідна Україна
Пользователь №: 44 825
Модель телефона: Moto G XT1033
Прошивка: CyanogenMod
Победитель конкурса 2008

Рейтинг: 744



Цитата(AlexKooper @ 5.3.2010, 18:47) *

if abs(x) < 1 and abs(y) < 1 then b:=true else b:=false;
if ((x*x)+(y*y)) > 1 then else b:= false;
if y>x then else b:=false;

if b=true then writeln ('Попадает');

Цитата(AlexKooper @ 5.3.2010, 18:47) *
Или как вариант

var b: integer;
writeln('введите координаты');
read(x,y);
if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0;
if ((x*x)+(y*y)) > 1 then b:= b+1;
if y>x then b:= b+1;

if b=3 then writeln ('Попадает');
Ты наркоман штоле?


Код
if ((abs(x) < 1 and abs(y) < 1) and  (((x*x)+(y*y)) > 1) and (y > x)) then writeln ('Bingo!');


Логические операции для кого придумали?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
AlexKooper
сообщение 6.3.2010, 16:26


Авторитет
********

Группа: Почётные мотофаны
Сообщений: 2 838
Регистрация: 27.7.2005
Из: Йошкар-Ола
Пользователь №: 47 140
Модель телефона: E398
Прошивка: AlexKooper mod v.47

Рейтинг: 1337



Цитата

Логические операции для кого придумали?


так ненаглядно же и отлаживать труднее... по моему опыту...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Dark Lamer
сообщение 6.3.2010, 17:02


Ветеран
*****

Группа: Пользователи
Сообщений: 380
Регистрация: 16.3.2009
Пользователь №: 195 788
Модель телефона: Moto rokr ЖРУ30
Прошивка: ковыряю 03.06

Рейтинг: 36.5



так наглядно и мы не вводим лишнюю переменную. Ишь избаловались мегабайтами памяти.

Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andrew_71
сообщение 6.3.2010, 23:02


Ветеран
*****

Группа: Пользователи
Сообщений: 374
Регистрация: 9.6.2007
Из: Рио-де-Мясново / Прейсиш Эйлау
Пользователь №: 137 694
Модель телефона: ROKR_Z6
Прошивка: PE 1.86

Рейтинг: 279



Цитата(Dark Lamer @ 6.3.2010, 20:02) *

Ишь избаловались мегабайтами памяти.


Ну-ка попробуй объявить переменных на мегабайт.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 7.3.2010, 4:52


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Цитата(Andrew_71 @ Сегодня, 4:02)

Ну-ка попробуй объявить переменных на мегабайт.
*


Ахахах. Да запросто.
char A[1024][1024];

Сообщение отредактировал DmT - 7.3.2010, 4:52
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 8.3.2010, 18:14


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



Странно,почему я ввожу точку с координатами 0.99,0.99 и пишет что она не лежит shok.gif
Ввожу -0.99 и 0.99 и тоже самое
Сменил тип на double все равно тоже самое

П.С. а сорри во втором условии написал < ,а не > :)
Спасибо еще раз
и вот еще задачка,дабы не создавать новую тему smile.gif
Прикрепленное изображение
Вычислить значение функции и осуществить вывод исходных данных и результат вычисления.

Сообщение отредактировал K-E-N-N-Y - 8.3.2010, 18:29
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Fenja
сообщение 8.3.2010, 18:52


Авторитет
********

Группа: Модераторы
Сообщений: 5 564
Регистрация: 25.8.2008
Из: г. Пенза
Пользователь №: 179 851
Модель телефона: MotoRazr v3i
Прошивка: MotoUpdate v1.1

Рейтинг: 1756



K-E-N-N-Y,
хм...
Цитата
Интересы: ...C++,Pascal,Web-design,php,html...

А задачка то.
Открываешь цикл от 1 до 44, в котором в зависимости от номера элемента вычисляешь выражение.

Сообщение отредактировал Fenja - 9.3.2010, 8:33
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 9.3.2010, 15:40


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



program q;
var a,k,n:real;
begin
n:=44;
for k:=1 to n do
if sqrt(k+2) <=3 then a:=(ln(k)+sqr(k))/sqrt(k+2)
else
if 3 < sqrt(k+2) <=6 then a:=sqrt(k+2.2)/+1/k;
else
if sqrt(k+2) > 6 then a:=cos(k)+2.2*(sqr(sin(k)));
writeln(a:10:4);
end.
так?

Сообщение отредактировал K-E-N-N-Y - 9.3.2010, 15:40
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Fenja
сообщение 9.3.2010, 16:10


Авторитет
********

Группа: Модераторы
Сообщений: 5 564
Регистрация: 25.8.2008
Из: г. Пенза
Пользователь №: 179 851
Модель телефона: MotoRazr v3i
Прошивка: MotoUpdate v1.1

Рейтинг: 1756



K-E-N-N-Y,
плохо помню паскаль правильность не скажу smile.gif
Но по заданию у тебя "Вычислить значение функции". Я так понял надо посчитать и сумму.
Код

s:=0;
и в цикле
s:=s+a;

З.Ы. И третье условие, имхо, проверять не обезательно, ибо по первому условию отсекаюется значения корня меньше 3, во второму отсекаются значения корня меньше шести, отсатеся только значения больше шести ph34r.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Weaknespase
сообщение 11.3.2010, 10:59


Ветеран
*****

Группа: Пользователи
Сообщений: 361
Регистрация: 11.8.2007
Из: г. Ростов-на-Дону, Россия
Пользователь №: 144 184
Модель телефона: Motorola Droid X^2

Рейтинг: 47



можно и без циклов. Ручками посчитать 3 интеграла и сложить по определённым условиям
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 13.5.2010, 3:49


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



ПРошу помочь решить еще 3 задачки smile.gif
Первая задачка - http://clip2net.com/clip/m44372/1273582995-clip-33kb.jpg

Вторая задачка -
Задание:
http://clip2net.com/clip/m44372/1273583242-clip-19kb.jpg
Само задание:
http://clip2net.com/clip/m44372/1273589781-clip-12kb.jpg Точность 0,0005

Третья задачка -
http://clip2net.com/clip/m44372/1273589872-clip-18kb.jpg

Пример который нужно решить:
http://clip2net.com/clip/m44372/1273589914-clip-6kb.jpg

Четвертая задачка:
http://clip2net.com/clip/m44372/1273590005-clip-38kb.jpg


Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andrew_71
сообщение 16.5.2010, 11:10


Ветеран
*****

Группа: Пользователи
Сообщений: 374
Регистрация: 9.6.2007
Из: Рио-де-Мясново / Прейсиш Эйлау
Пользователь №: 137 694
Модель телефона: ROKR_Z6
Прошивка: PE 1.86

Рейтинг: 279



Первая задача
Spoiler:

Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#define N 15              //размерность массива
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        int i,j,m[N][N], M = 100;

        //заполняем числами от 1 до M

        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                {
                        m[i][j]=rand()%M+1;
                }
        int numOfString[N];
        for(i = 0; i < N; i++)
        {
               numOfString[i] = -1;
        }

        //выводим исходный массив и смотрим, где есть элемент 1

        for(i=0; i<N;i++)
        {
                for(j=0;j<N;j++)
                        {
                                if(m[i][j] == 1)
                                {
                                      numOfString[i] = i;
                                }
                                printf("%d", m[i][j]);
                                printf(" ");
                        }
                printf("\n");
        }
        printf("\n");

        //смотрим строки с единицами и умножаем элементы
        for(i = 0; i < N; i++)
        {
              printf("%d ", numOfString[i]);
              if(numOfString[i] != -1)
              {
                     for(j = 0; j < N; j++)
                        {
                                m[numOfString[i]][j] = m[numOfString[i]][j]*5;
                        }
              }
        }
        printf("\n \n");
        //выводим то безобразие, которое получилось

        for(i=0; i<N;i++)
        {
                for(j=0;j<N;j++)
                        {
                                printf("%d", m[i][j]);
                                printf(" ");
                        }
                printf("\n");
        }
        getchar();
        return 0;
}
//---------------------------------------------------------------------------

[close]



Вторая задача
Spoiler:

Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <math.h>
//---------------------------------------------------------------------------
double Func(double x)
{
      return (pow(x, 0.5) + 1)/pow(x, 2);      //Исходная функция
}
#pragma argsused
int main(int argc, char* argv[])
{
        float a = 1, b = 2, e = (b - a)/10; //границы интервала и шаг
        double res = 0; //результат

        for(float i = a; i < b + e; i = i + e)
        {
                res += (Func(i) + Func(i + e))/2;
        }
        printf ("Result: %.8f", res);    //вывести с точностью до 8 знаков
        getchar();
        return 0;
}
//---------------------------------------------------------------------------
[close]



Третья задача. В принципе должна работать, но ловит эксепшн... Если корень на интервале один, то алгоритм правильный.
Spoiler:
Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <math.h>
//---------------------------------------------------------------------------
long double Func(long double x)
{
      return log(tan(M_PI + x));      //Исходная функция
}
long double Mod(long double x, long double y)
{
      if(x > y)
        return x - y;
      else
        return y - x;
}
long double dihotomia(long double a, long double b, long double e)
{
      if(Mod(a, b) > e)
        {
                long double c = (b+a)/2;
                if((Func(a) < 0 && Func(c) > 0) || (Func(a) > 0 && Func(c) < 0)) //Если знаки на концах интервала разные
                {
                        dihotomia(a, c, e);
                }
                else                                                                  //Если же нет, то разные они на другом интервале
                {
                        dihotomia(c, b, e);
                }
        }
      else
        return a;


}
#pragma argsused
int main(int argc, char* argv[])
{
        long double e = 0.00001;
        long double a = 0.01;                  //Ищем корень в третьем квандранте
        long double b = M_PI_2 - 0.01;


        printf("Result: %f", dihotomia(a, b, e));
        getchar();
}
//---------------------------------------------------------------------------
[close]



Четвертая задача
Spoiler:
Код

//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#define N 8              //размерность массива
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        int i,j,k,m[N][N], M = 4;

        //заполняем числами от 1 до M

        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                {
                        m[i][j]=rand()%M+1;
                }
        int Sum[N/2 + 1];

        //Выводим массив
         for(i=0; i<N;i++)
        {
                for(j=0;j<N;j++)
                        {
                                printf("%d", m[i][j]);
                                printf(" ");
                        }
                printf("\n");
        }

        //Складываем элементы в нужном порядке
        for(i = 0; i < N/2 + 1; i++)
        {
                int res = 0;
                for(j = i; j < N-i; j++)
                        res += m[i][j];
                for(j = i; j < N-i; j++)
                        res += m[N - 1 - i][j];
                for(j = i+1; j < N-i-1; j++)
                        res += m[j][i];
                for(j = i+1; j < N-i-1; j++)
                        res += m[j][N - i - 1];
                Sum[i] = res;
        }

        //Выводим получившиеся суммы
        Sum[N/2] = Sum[N/2]/2;
        for(i = 0; i < N/2 + 1; i++)
                printf("%d ", Sum[i]);
        getchar();
        return 0;
}
//---------------------------------------------------------------------------
[close]


Сообщение отредактировал Andrew_71 - 16.5.2010, 13:03
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 16.5.2010, 13:16


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



K-E-N-N-Y, ты меня удивляешь, таки простые задачи сделать не можешь, лентяй ты...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
K-E-N-N-Y
сообщение 2.6.2010, 16:00


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 533



и снова я)
вот у меня задание: определить разность двух матриц А и В.Вывести все 3 матрицы
вот я сделал прогу:
Цитата
program qq;
const count=5;
var i,j,x,y:integer;
mas1,mas2:array[0..count,0..count] of integer;
begin
randomize;
for i:=0 to count do
for j:=0 to count do
begin
mas1[i][j]:=random(10)+10;
mas2[i][j]:=random(10)+10;
end;

writeln('pervaya matrica: ');
for i:=0 to count do
begin
writeln;
for j:=0 to count do
write(mas1[i][j],' ');
end;
writeln;

writeln('vtoraya matrica: ');
for i:=0 to count do
begin
writeln;
for j:=0 to count do
write(mas2[i][j],' ');
end;
writeln;

writeln('posle vychitaniya: ');
for i:=0 to count do
for j:=0 to count do
mas1[i][j]:=mas1[i][j]-mas2[i][j];
for i:=0 to count do
begin
writeln;
for j:=0 to count do
write(mas1[i][j],' ');
end;
readln;
end.

но,он сказал,чтобы программа бы сделана не под конкретную задачу,а под все,т.е. проверять правило вычитание матриц (там вроде нельзя вычитать если у них разное кол-во строк или столбцов),так вот вопрос,как это сделать?

Задача 2.
преобразовать данную последовательность символов,замеяя всякое вхождение слова "это" на "то",я знаю как сделать с цифрами только( подскажите как сделать с символами?

ЯЗЫК ПАСКАЛЬ

Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 2.6.2010, 16:30


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



K-E-N-N-Y, тип строка - string, символ -char, строка 255 символов, нулевой отвечает за длинну строки...
работать со сторокой, как с массивом символов...
Код
var str: string;
begin
str:='blablabla';
str[1]:='f';
writeln(str);
end;
// flablabla выйдет


так же можно в цикле работать например со строкой
Код
var s: string;
i,k:integer;
begin
k:=0;
s:='blablabla';
for i:=1 to length(s) do
begin
if (s[i]='a') then s[i]:='u';
if (s[i]='b') then begin s[i]:='t'; k:=k+1; end;
end;
writeln(s);
writeln(k);
end;
// tlutlutlu выйдет
// 3
// т.е. три замены буквы 'b'


длинна как я сказал, в нулевом символе
Код
var str: string;
i,k,r:integer;
begin
i:=1;
str:='атото';
r:=length(str);
while (i<length(str)-1) do
begin
if (i<length(str)) then if ((str[i]='т')and(str[i+1]='о')) then
begin
str[0]:=chr(length(str)+1);
for k:=i to length(str)-1 do str[i+1]:=str[i];
str[i]:='э';
i:=i+2;
end;
i:=i+1;
end;
writeln(str);
writeln(r-length(str));
end;
// аэтоэто
// должно выйти
// 2
// сколько было замен


п.с. код писал сразу в окошко форума, не проверял, не уверен что везде правильно, но принцип понять можно...

Сообщение отредактировал baat - 2.6.2010, 17:16
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Delta_3D
сообщение 2.6.2010, 16:56


MotoGirl
****

Группа: Пользователи
Сообщений: 206
Регистрация: 23.9.2006
Из: Ставрополь
Пользователь №: 100 315
Модель телефона: ZN5 T-m, Atrix 2 R.I.P.


Настроение:
Sweet overdose



Рейтинг: 149



первая задача устроит в таком виде?
Код
program qq;
uses wincrt;
var i,j,x,y,n,m,k,t:integer;
mas1:array[1..40,1..40] of integer;
mas2:array[1..40,1..40] of integer;
mas3:array[1..40,1..40] of integer;
begin
write ('vvedite kol-vo strok:');
readln (n);
write ('vvedite kol-vo stolbcov:');
readln (m);
write ('vvedite kol-vo strok:');
readln (k);
write ('vvedite kol-vo stolbcov:');
readln (t);
writeln ('vvedite matricu: ');
for i:=1 to n do   begin
for j:=1 to m do   begin
readln (mas1[i,j]);
end;
end;
writeln ('vvedite vtoruu matricu: ');
for i:=1 to k do   begin
for j:=1 to t do   begin
readln (mas2[i,j]);
end;
end;
write('pervaya matrica: ');
for i:=1 to n do begin
writeln;
for j:=1 to m do begin
write(mas1[i,j],' ');
end;
end;
writeln;

write('vtoraya matrica: ');
for i:=1 to k do begin
writeln;
for j:=1 to t do begin
write(mas2[i,j],' ');
end;
end;
writeln;
if (n=k) and (m=t) then begin
x:=n;
y:=m;
write('posle vychitaniya: ');
for i:=1 to n do  begin
for j:=1 to m do  begin
mas3[i,j]:=mas1[i,j]-mas2[i,j];
end;
end;
for i:=1 to x do begin
writeln;
for j:=1 to y do begin
write(mas3[i,j],' ');
end;
end;
end
else
writeln;
writeln ('naiti raznost nelzya:');
readln;
end.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
baat
сообщение 2.6.2010, 17:00


Самый Наглый
******

Группа: В отставке
Сообщений: 1 282
Регистрация: 18.5.2006
Из: Дом, милый дом...
Пользователь №: 83 674
Модель телефона: старая модель...
Прошивка: какая уж есть...
Победитель конкурса 2008


Настроение:
...



Рейтинг: 1535



Delta_3D, а почему бы
вместо
Код
mas1:array[1..40,1..40] of integer;
mas2:array[1..40,1..40] of integer;
mas3:array[1..40,1..40] of integer;

не писать хотябы
Код
mas1, mas2, mas3:array[1..40,1..40] of integer;

smile.gif

и вместо
Код
for i:=1 to n do   begin
for j:=1 to m do   begin
readln (mas1[i,j]);
end;
end;

не написать
Код
for i:=1 to n do  
for j:=1 to m do  
readln (mas1[i,j]);



Сообщение отредактировал baat - 2.6.2010, 17:01
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Delta_3D
сообщение 2.6.2010, 17:12


MotoGirl
****

Группа: Пользователи
Сообщений: 206
Регистрация: 23.9.2006
Из: Ставрополь
Пользователь №: 100 315
Модель телефона: ZN5 T-m, Atrix 2 R.I.P.


Настроение:
Sweet overdose



Рейтинг: 149



Цитата(baat @ Сегодня, 21:00)

mas1:array[1..40,1..40] of integer;
mas2:array[1..40,1..40] of integer;
mas3:array[1..40,1..40] of integer;
*


девушке простительна такая глупость laugh.gif
Цитата(baat @ Сегодня, 21:00)

не написать
Код
for i:=1 to n do
for j:=1 to m do
readln (mas1[i,j]);
*


эээ а разве так цикл проходит полностью? он пройдется по первой строке и столбцу и все? в общем привыкла ставить лишние (наверное) операторы))) как научили так и решаем
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Помогите решить задачку по програмингу, +3 к репе дам) · Обо всём · Forum
 

2 страниц V  1 2 >
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 23:14

Форум живёт: