Member
Статус: Не в сети Регистрация: 17.10.2003 Откуда: Киев
HofD Посмотри текст программы. Там я выделил ту часть, где определяются координаты центра знака- меняй как хочешь.
А вот как правильнее вывести синус не знаю. Первое что приходит в голову- заменить параметрическое уравнение чем-нибудь вроде
Код:
...... x=60;//до цикла ...... y=240+180*sin(x*Pi/(32)); x+=0.1; if (x==580) return 0;
Эту синусоиду нарисовать в самом начале программы, а потом каждый раз после очистки экрана перерисовывать ее часть (от x-r1 до x+r1). Но это наверноее будет слишком медленно, может есть способ лучше.
type TForm1 = class(TForm) Label1: TLabel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; rStr, sourceSTR: string; pos: integer;
implementation
{$R *.dfm}
function runstr():boolean; begin rStr:=copy(sourceStr,pos,Length(sourceSTR)-pos); rStr:=rStr+' '+copy(sourceStr,1,pos); Form1.Label1.Caption:=rStr; inc(pos); if pos>= Length(sourceSTR) then pos:=1; end;
procedure TForm1.FormCreate(Sender: TObject); begin sourceSTR:='Это бегущая строка! '; pos:=1; Form1.BorderStyle:=bsNone; Form1.Top:=0; Form1.Left:=0; Form1.Width:=Screen.Width; Form1.Height:=Screen.Height; Form1.FormStyle:=fsStayOnTop; Label1.Width:=Screen.Width; Label1.Top:=(Screen.Height div 2) - (Label1.Height div 2); Label1.Left:=(Screen.Width div 2) - (Label1.Width div 2); Form1.Color:=clBlack; Label1.Color:=clBlack; Label1.Font.Color:=clWhite; Label1.Font.Size:=72; Label1.Font.Name:='Arial'; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=27 then Close; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin runstr(); end;
end.
На форме нужен Label и Timer
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Lord_of_Darkness спасибо конечно огромное , но куда мне это вставлять ... я же говорю не прогаммер я .... скинь плиз на мэил frolis@yandex.ru ехешник спасибо
спасибо всем кто не бросил в беде , а теперь по подробнее нужно чтоб бегущая строчка была на фоне другой проги т.е. вообще идея такая работает прога QUIK (это терминал для работы с акциями) и хотелось чтоб на фоне неё бежала бегущая строчка (внизу экрна), в которую я мог из буфера или из файли ТХТэшного вставлял которивки или новости .. вот вроде подробно ответил . И еще экрна плазма хотелось чтоб полность от начала до конца экрна бежала строчка.
Member
Статус: Не в сети Регистрация: 25.06.2004 Откуда: Ukraine
Вот такие две проги нужно написать:
8.Перечислите все слова данного предложения, которые состоят из тех же букв, что и первое слово предложения.
9.Заданы две строки. Найдите самую длинную их общую часть.
Или хоть на теорию ссылки дайте. Со строками в Си у меня большие проблемы.
Member
Статус: Не в сети Регистрация: 08.12.2004 Откуда: Москва
yuris Напиши поподробнее: какого типа входные данные, на каком языке и в какой среде надо реализовать.
Насчет теории скажу так: читай Подбельского, там все понятно изложено. Если не так понятно, как мне кажется;),
пиши сюда. Добавлено спустя 5 минут, 36 секунд Ура! У меня юбилей: ровно 50 сообщений! Принимаю всеобщие поздравления !
_________________ Я не суеверный. Я наблюдательный
Member
Статус: Не в сети Регистрация: 04.02.2004 Откуда: Москва|СВАО
yuris Ну в первой задаче алгоритм приблезительно таков:
1. Определяем множество букв из которых состоит первое слово предложения (предлагаю назвать это Тезаурусом), для этого считываем в строку (Str1) все буквы исходного текста(Txt) до первого пробела или точки (вдруг предложение из одного слова!)
После этого берем первую букву слова(из Str1) и запоминаем ее как первый элемент новой строки (Str2), далее берем вторую букву сравниваем ее со всеми символами в Str2, если там уже есть такая (у слова первая и вторая буква одинкаовые) то переходим к третей букве Str2, если нет то сохраняем ее в Str2 (теперь у нас там две разных буквы). Надеюсь Вы поняли идею, так надо прошерстить всю Str1 и в результате в Str2 окажутся все буквы которые есть были в Str1 (без повторений) тость например из слова "программа" мы получим "прогам".
Далее предлогаю упорядочить тезаурус - методов для этого масса (можно использовать код ASCI и сортирновать как обычные числа), то есть выстраиваем его элементы по алфавиту (в результате имеем новый вариант Str2 упорядоченный по алфавиту)
После этого возвращаемя к исходному тексту Txt из него последовательно выбираем слова (считывая их от пробела до пробела/точки). Получаем тезаурус этого слова (алгоритм я описал для первого слова). Упорядычиваем его. Получаем строку Str3
После этого сравниваем Str2 и Str3...N
Надеюсь Вы поняли что я пытался объяснить.
Если до завтра не кто не поможет попробу описать алгоритм второй.
_________________ Счастье - это когда тебя понимают.
Разыскиваю (куплю) оригинальный USB-kit для Chaintech 5AGM2 (подробности в Л.С.).
Member
Статус: Не в сети Регистрация: 08.12.2004 Откуда: Москва
yuris Вот набросал тут вариант решения пункта 8. Получилось довольно длинно, наверно где-то можно упростить.
Из особенностей: разбирается только первое предложение Memo1; точки, запятые и т.д. воспринимаются как слова или части слова(м.исправить); сами слова, удовлетворяющие условию никуда не копируются, а просто выводятся на экран.
Написано в Билдере, на форме размещены кнопка Button1 и мемо Memo1. Если у тебя VisualC, BC3.1 или еще что-то другое, пиши, постараюсь исправить код, чтоб работало везде. Если надо, могу выслать проект целиком тебе на мыло, только оставь координаты.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender) { //Перечислите все слова данного предложения, которые состоят из тех же букв, что и первое слово предложения. char sPredlogenie[100]; char sBukvy[33]; //зависит от языка char sCurSlovo[20]; //текущее слово int nSlovoLen = 0; int nBukvyCol = 0; int nWords = 0; int i = 0; int j = 0; int fl = 0; char *buf = new char[ Memo1->Lines->Strings[0].Length() + 1 ];
strcpy( buf, Memo1->Lines->Strings[0].c_str() );
//Очистка предложения strcpy(sPredlogenie, ""); //Рассматриваем первое предложение strcpy( sPredlogenie, buf);
//Берем первое слово while( sPredlogenie[i] != ' ') { fl = 0; //Проверка, что символ раньше не встречался for( j = 0; j < nBukvyCol; j++) if( sPredlogenie[i] == sBukvy[j] ) fl = 1;
//Добавить в набор букв if( fl == 0 ) { sBukvy[nBukvyCol] = sPredlogenie[i]; nBukvyCol++; } i++; }
nWords = 0; //Число слов
while(sPredlogenie[i] != '\0') //Пока не конец предложения { strcpy( sCurSlovo, ""); nSlovoLen = 0; //Пропускаем пробелы while( sPredlogenie[i] == ' ') i++;
if(nSlovoLen > 0) { sCurSlovo[nSlovoLen] = '\0'; //уловка для более красивого вывода на экран //если закомментировать, все равно будет работать правильно nWords++; }
fl = 0; int k = 0; //доп.счетчик for(k = 0; k < nSlovoLen; k++) { for( j = 0; j < nBukvyCol; j++) if( sCurSlovo[k] == sBukvy[j] ) { fl = 1; break; //из for по j } //Если весь массив букв пройден, совпадений нет if( j == nBukvyCol ) { fl = 0; break; //из for по k } }
if(fl == 1) ShowMessage("Слово "+IntToStr(nWords)+" состоит из букв первого слова:\n\n" + AnsiString(sCurSlovo)); else ShowMessage("Слово "+IntToStr(nWords)+" состоит НЕ только из букв первого слова:\n\n" + AnsiString(sCurSlovo));
} //while
_________________ Я не суеверный. Я наблюдательный
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения