ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 07.09.2007, 17:13
Rast1k
Banned
Регистрация: 09.08.2007
Сообщений: 56
Провел на форуме:
372630

Репутация: -63
Отправить сообщение для Rast1k с помощью ICQ
По умолчанию

Цитата:
Сообщение от Red_Red1  
Запустил прогу, не вижу синусоиды!!!! Выглядит примерно так
=)antichat=)antichat=)antichat=)antichat=)antichat =)antichat и т.д.
Так и надо?
По поводу одной переменной. Тут идея должна быть такая:
движение по синусоиде это y=sin(x). из этого видно что нам достаточно переменной х (одной), а вместо y можно подставлять выражение sin(x).
Но это только теория, на паскале нужно еще будет округлять и адаптировать к координатам экрана. Но это уже дело техники, ядро програмки будет все таки y=sin(x). Если не додумаешь код самостоятельно, пиши.
Не тут синусойда есть вроде в коде:
Код:
a:= i*pi/180;
x:=round(i/4.5);
y:=round(25+24*sin(a));
 
Ответить с цитированием

  #12  
Старый 08.09.2007, 01:16
Red_Red1
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
Провел на форуме:
4608122

Репутация: 874
Отправить сообщение для Red_Red1 с помощью ICQ
По умолчанию

Так я и знал не поверил.
Rast1k, ты пробовал запускать свою программу? Не думаю, иначе ты бы не спорил. Еще раз повторю ТВОЙ код не выводит синусоиду.
Объясню почему.
В программе допущено несколько ошибок, которые влияют на вывод изображения в текстовом режиме.
Первая в строке
Код:
x:=round(i/4.5);
Ошибка логическая, суть ее в том что в процедуру gotoxy () нельзя подставлять числа которые меньше или равны нулю и больше 81 и 25 для "x" и "y" соответственно. Если это сделать то процедура просто не выполнится и курсор останется НА МЕСТЕ!!!
Проанализируем значения "х" в начале работы цикла. При i=1 округленное значение данного выражения равно 0 (что не допустимо для передачи в процедуру gotoxy ()), так происходит пока "i" не становится равно 3, тогда х=1. Казалось бы тут должно заработать но…
Вторая ошибка в строке
Код:
y:=round(25+24*sin(a));
При i=2 y=26!!! Вот тут и есть ошибка, выражение 24*sin(a) в этот момент дает 0,83, прибавляем 25 и округляем, в итоге получаем 26. Что опять же не допустимо для передачи в процедуру gotoxy (). Эту ошибку можно исправить поставив минус вместо плюса
Код:
y:=round(25-24*sin(a));
Правда в при этом коде это решит проблему только до того момента пока синус не даст отрицательные числа!!!! Потом снова лажа....
Исправить первую можно вот такой строкой
Код:
gotoxy(x+1,y);
Т.е. не дать "х" быть нулем никогда. Но в любом случае это не решает второй проблемы....
Итак, как же должно быть? (мое решение):
Сначала нужно понять что рисовать на экране (особенно в текстовом режиме), график функции область значения которой от -1 до 1 используя ЧИСТУЮ формулу (в нашем случае y=sin(x) ) не получиться, т.к. график получиться некрасивым. Опять же нужно всегда использовать округление т.к. координаты позиции курсора это ЦЕЛЫЕ ЧИСЛА БОЛЬШЕ НУЛЯ! Итак нужно немного изменить формулу функции. Экспериментально я нашел такой вариант y=7*sin(0.1*x)+12. Число 7 увеличивает амплитуду волны, а 0,1 делает ее шире, 12, я добавляю чтобы синусоида выводилась в центре экрана.
Результат:
Будем брать значения "X" от 1 до 80 т.к. в текстовом режиме максимальный "Х"=80
"Y" вычисляем по формуле
Код:
y= round(7*sin(0.1*x)+12)
У автора в программке был перевод из градусов в радианы т.к. в Паскале в синус идут радианы. В данном случае это нафиг не надо.
Еще был вопрос как это все сделать имея одну переменную. Решение очевидно, вычисления нужно проводить в gotoxy (), т.е. основой программки будет строчка
Код:
gotoxy(x,round(7*sin(0.1*x))+12);
Все, дальше уже дело техники и конечный результат выглядит так
Код:
uses crt;
var x: integer;
begin
clrscr;
for x:=1 to 80 do
                begin
                  gotoxy(x,round(7*sin(0.1*x))+12);
                  write('=)antichat');
                  delay (1500);
                end;
readln;
end.
readln; добавил для того чтобы увидеть результат работы. Нажимаем энтер и выходим из программы.

Я для чего так много писал... Вот человек задал вопрос, попросил помощи, но даже не стал проверять то что ему рассказали, не поверил. Нафига тогда задавать вопросы? Задачка сама по себе пустяковая, но чтобы ее решить нужно все равно ПОДУМАТЬ. А чтобы найти ошибки нужно уметь анализировать код. А в такой простой программе это сделать легко, но такое чувство что автор просто не хотел. Вроде как раздел посвящен кодерам, так давайте думать над кодом, а не делать быстрые выводы...

Цитата:
Сообщение от Rast1k  
Не тут синусойда есть вроде в коде:
З.Ы. Может я снова перестарался с описанием ситуации?

Последний раз редактировалось Red_Red1; 11.09.2007 в 13:38..
 
Ответить с цитированием

  #13  
Старый 08.09.2007, 14:32
Rast1k
Banned
Регистрация: 09.08.2007
Сообщений: 56
Провел на форуме:
372630

Репутация: -63
Отправить сообщение для Rast1k с помощью ICQ
По умолчанию

delay(1500) - слишком много для синусойды=)

особенно для 1 to 80 do.

Минимальное значение: delay(500);

Но это не главное.

Главная ошибка.

Надо, что бы вырисовывалось Смайликом(ctrl+b)...

Должна им выписываться надпись "antichat".

То есть должно быть так(100%):
Код:
gotoxy(x,y);
write('=))))');
delay(500);
gotoxy(x,y);
write('antichat');
end;
end.
С одной переменной синосойда получается только как сказал W!Z@rD.

У тебя получается что-то странное.

Ты наверное перепутал синусоиду с параболой.

Потому что
Код:
1 to 80 do
более характерно для параболы, тем более с одной переменной.

Еще синосойда может не поулучаться изза монитора.

Попрбуй взять код
Код:
y:=round(25-24*sin(a));
А также меняй
Код:
for i:= 1 to 90 do
begin
a=i*pi/90;

Последний раз редактировалось Rast1k; 08.09.2007 в 23:00..
 
Ответить с цитированием

  #14  
Старый 11.09.2007, 13:47
Red_Red1
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
Провел на форуме:
4608122

Репутация: 874
Отправить сообщение для Red_Red1 с помощью ICQ
По умолчанию

Чушь полная. Причем тут много для синусоиды от 1 до 80. Область определения функции от минус до плюс бесконечность.
Как смайликом можно вырисовать АНТИЧАТ и при этом сюда же приделать движение по синусоиде? О_О Тот код который ты привел ОДНОЗНАЧНО этого не нарисует. Хотя есть одно но, может ты не верно формулируешь задание.
Тебе нужно движение по синусоиде или нет. Если да,то что должно двигаться.
Цитата:
более характерно для параболы, тем более с одной переменной.
Тут вообще дикость - иди учи матчасть.....
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кто играет в www.ganjawars.ru ??? помогите kuppher Болталка 12 26.07.2008 23:38
ПомогитЕ !!! подалуста найти кряк гейлордфакерЪ Болталка 2 30.08.2007 14:48
ПоМоГиТе! ПЛЗ!!! farik.aka E-Mail 1 17.09.2006 13:00



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ