Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 51) Ответы-51
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!51) Ответы-5132. Сумма-разность 2-3 строк.
#include <iostream.h> На Бейсике:
function namedfunction()
for I = 4 to 72
end function На Паскале:
program zad32;
Ярослав N 33. Заполните матрицу случайными символами (тип char). Найдите столбец, где какой-то символ (для каждого столбца надо определить, какой он будет в этом столбце - какой будет встречаться в столбце чаще всего) встречается наибольшее число раз (если в столбце 3 символ "*" - самый частый, встретился 6 раз, а в столбце 2 символ "J" - самый частый, встретился 7 раз, то результатом будет 2-й столбец).
Чуть не озверела, пока это упражнение доделала. Сначала никак не На Паскале:
program Project2;
Алексей 35. Подстрока. Функция,находящая первое вхождение заданной подстроки в строку - номер символа
//Функция, возвращает подстроку с позиции а длиной b На Паскале:
function vps(s,ps:string): integer; // входящие и возвращаемый
for j:=1 to ds do // символы строки
procedure TForm1.Button11Click(Sender: TObject);
nv:=vps(str,pstr);
Лена N 36. Написать функцию, заменяющую все вхождения одной подстроки на другую (могут быть разной длины!). Например, заменить каждый пробел на три звездочки. Или наоборот.
Здесь я обнаружила, что переменная объявленная в цикле (for int i=0)
//--------------------------------------------------------------------------- На Паскале:
// Функция, заменяющая одну подстроку в строке на другую
begin
dstr:=length(str); // длина строки
while (nv<>0) do // делать, пока можно найти подстроку
procedure TForm1.Button12Click(Sender: TObject);
np:=pos(ps,s); // проверить, является ли подстрока подстрокой
if np<>0 then // если да, то
Label37.Caption:=st;
end; 37. Посчитать цифры в числе
void __fastcall TForm1::Button1Click(TObject *Sender) На Паскале:
procedure TForm1.Button13Click(Sender: TObject);
var d,i,j,l:integer; // длина строки, счётчики, индекс символа
for l:=1 to 10 do sum[l]:=1; // сумма каждой цифры равна одному
d:=length(rs); // длина числа-строки
for i:=1 to d do // анализируемая цифра числа-строки
for j:=i+1 to d do //цифра следующая за
case (sum[l]mod 100) of // выбор падежного
Label39.Caption:=s; 38. Разделить строку по символам-разделителям
void __fastcall TForm1::Button1Click(TObject *Sender) На Паскале:
unit Unit1;
Алексей N 39. Дано целое число N. Проверить, является ли оно суммой своих делителей (которые тоже надо найти). 6 = 1+2+3.
void __fastcall TForm1::Button1Click(TObject *Sender) На Паскале:
procedure TForm1.Button14Click(Sender: TObject);
a:=StrToInt(Edit7.Text);
n:=0; // начальный номер делителя
d:=d+1; // делитель увеличивается на один
// вывод результата
program Project2; Вот Надежда тоже придумала свой метод сортировки! Что-то слышала про пузырьковый метод. Но придумала свой :) метод - вычисляем наименьшее (или наибольшее), меняем местами с первым элементом массива, затем то же самое с оставшимися элементами. Стала кодировать. Вложенный цикл надо делать. Что-то не работает. Полезла в книжку и наткнулась на свой:)) метод - он второй по простоте после пузырькового метода, наверно, во всех книжках есть. А с кодом я при помощи отладчика справилась - проверяла каждое действие, находила ошибки.
procedure TForm1.Button1Click(Sender: TObject);
//Сортировка
//Ищу наименьший
//Вывести на экран массив На этом пока все. Таня на сайте begin.polubomu.ru готовит также ряд ответов, в рассылку по причине объема не вошедших.
Хочу также присоединиться к Олегу с выражением благодарности Тане,
причём не только за то, что она взяла на себя труд разбираться в
наших
заморочках (а вникать в чужой код, на мой взгляд, раз в 10 труднее,
чем с нуля написать собственный), за советы по оптимизации кода
(можно
сделать проще - гораздо ценнее, чем банальное выискивание ошибок,
которые, в принципе, можно найти и самому), но и за то, что не
отказывается вести разговор, пусть и касающийся программирования, но
не относящийся непосредственно к тематике заданий. * И про матрицы вопрос такой. Это как то можно увидеть на экране ? Алексей Можно так- нажимаете в отдладчике, когда работа программы приостановлена, Ctrl+F7, показывается окно, в котором всегда можно посмотреть значение любой переменной. Вводите, типа a[5,7] и жмете enter. А если просто "a" ввести (имя переменной-массива), то он может показаться достаточно аккуратно, как массив в принципе... Можете еще в отладчике навести курсор на переменную-массив :) * SpeedButton, вот ты пишешь(книгу читаю, потихоньку), у этой кнопки есть свойство Flat, ну это чтобы кнопка принимала плоский вид, я не нашла этого свойства в инспекторе, его там нет?, надо это свойство в самом коде указывать? Там - в инспекторе - это свойство есть :) * И еще насчет всплывающей подсказки. Оказывается она называется code completion.(то есть завершение кода, появляется после введения точки в названии объекта). Да, можно в настройках - Tools -Editor Options на вкладке Code Insight задать, нужно ли автоматически предлагать такую подсказку, подсказывать количество и типы параметров функций, показывать значение выражений, на которых находится курсор (для режима отладки) и давать описание идентификатора, над которым курсор (у меня включены все, за исключением последней). А на вкладке Color в списке Color SpeedSetting можно выбрать одну из множества расцветок синтаксиса в редакторе. У меня стоит Classic. На этой же вкладке можно настроить и мелкие детали синтаксиса, как их показывать. * Потом преобразовала это число в строку с фиксированным количеством знаков - FloatToStrF(d[x,y],ffFixed,4,2). Кстати "4" это всё-таки количество знаков, а два это то ,что после запятой. Это для тех информация, кто спрашивал, как в Дельфи аккуратно выводить числа с плавающей запятой.
*
Узнал я как в MVC++.
* Хотел сделать изменение шрифта в табличке(простой-жирный-и т д),не нашел как. Шрифт меняется так - в свойстве Font есть подсвойство Style, там логические значения fsBold - сделать жирным, fsItalic - наклонно итд. Применяется практически ко всем элементам управления, всех видов. * Что-то у меня с записью в файл плохо получается. Дело в том, что когда я пишу
for (i=1;i<=100;i++){ все строки записываются в файле в одну строку. Вот, например, когда я пыталась сделать 40 задание:
void __fastcall TForm1::Button1Click(TObject *Sender)
в список у меня загружаются все строчки из Memo подряд в одну строку. Я попыталась исправить положение приписав к каждой строке перенос строки:
str = Memo1->Lines->Strings[i]+"\n"; После этого строки в файл стали писаться по отдельности. Но вот с внесением строк в список дело обстоит хуже: во-первых после строки в списке появляется лишний символ (как раз перенос строки, я полагаю), а во-вторых последняя строка из файла заносится в список два раза. Причину этого явления я так и не смогла понять. В Си для записи с переводом на новую строку действительно надо указывать дополнительно символ новой строки. При этом он и во вводимой поток попадает, это именно он и есть. Проще всего - явно его обрезать например. После того, как ввели: fgets(buf,100,fi); находим последий символ - для этого можно функцию числа символов в строке задействовать, strlen(): int n = strlen(buf); после чего последим элементом вместо символа перевода строки записать ноль (символ конца строки): buf[ n-1 ] = 0;
str=buf; Кстати с этой программой у меня возникла неприятная проблема. Я сняла галочки в Project|Options|Packages с Build with runtime packages, и в Project|Options|Linker с Use dynamic RTL, прокомпилировала. Перезагрузилась в Win XP (Си у меня стоит в Win 98), посмотреть, будет ли работать. Ну вот, работать-то работает, но ScrollBar рисуется не по центру, и картинка обрезается снизу, а справа чуть ли не полкартинки обрезается. Почему так происходит, и как с этим бороться? Есть такая проблема, по-моему это связано с тем, что в XP вид некоторых элементов управления настраивавется под текущие настройки системной темы. Поэтому для одинакового внешнего вида (если делать и для XP, и для 98), надо задействовать так называемые манифесты - текстовые (XML) файлы, в которых описываются конкретные настройки в зависимости от версии Windows. По-моему, в Дельфи 7 есть даже компонент такой, типа XP Manifecto, но сам не сталкивался никогда, не знаю. Андрей прислал файл: windowsxp.res Если его подключить к проекту перед компиляцией, то программа начинает использовать элементы управления (кнопки, диалоги) в стиле Windows XP. Возможно, это пригодится читателям рассылки. Наконец, обещанное письмо Андрея по поводу ввода-вывода с помощью возможностей Си++.
В самом начале Вашей рассылки мы обсуждали
преимущества языка C++ над остальными языками программирования (я его
изучил в своё время самостоятельно, а первая любовь не ржавеет, хотя я
сейчас пытаюсь продраться через дебри Паскаля) и где взять компилятор.
С тех пор я только пару раз Вам писал, предпочитая присоединиться к
молчащему большинству. Не потому, что не делаю домашних заданий, а
потому, что о чём же писать, если всё ясно и понятно? Вам и без меня
слишком много пишут, полагаю. :) Пример:
#include <fstream.h> // Для доступа к классам файлового
Кстати, в классе fstream есть одна фишка, которая мне очень нравится:
в его конструкторе есть функция-член bool fstream::is_open(); которая
проверяет правильность открытия файла (который физически на диске
может и не существовать, неправильно задан путь и т.д.). В принципе,
можно записать и так if(MyFile.is_open()==true), но, поскольку в
классах fstream (ввод-вывод), ofstream (запись), ifstream (считывание)
эта функция-член вызывается автоматически (ещё одно преимущество C++),
то достаточно написать if(MyFile): C++ язык для тех, кто не любит
долго набирать с клавиатуры! :) Ещё одним достоинством класса fstream я считаю, что он поддерживает все типы C++, включая указатели, причём ввод в файл осуществляется стандартно, подобно cout<< , а вывод из файла - с помощью функции-члена getline(char*, int MAXIMAL_LENGTH_OF_A_STRING); Пример:
#include <iostream.h>
Результат выполнения данной программы - появление на экране строк: А если добавить, что класс fstream поддерживает неформатированный ввод-вывод, т.е. позволяет редактировать не только текстовые, но и бинарные файлы... Словом, я свой выбор сделал... :) Только взгляните, какое богатство режимов обращения к файлам: ios::in - считывание, позиционирование в начало файла (или можно использовать класс ifstream - у него это по умолчанию) ios::out - запись поверх имеющихся, позиционирование в начало файла, стирание без предупреждения (или можно использовать класс ifstream - у него это по умолчанию) Пример (пытался набросать почтовую программу, но не получилось, но всё же):
void __fastcall TMainForm::FormActivate(TObject *Sender)
Здесь - считывание с начала файла, запись - поверх имеющейся, файлам присваивается атрибут "скрытый".
ios::ate - для записи и считывания. Запись поверх первоначальной, но
позиционирование в конец файла
Права доступа к файлу: Оставшаяся часть письма выйдет в подборке с решениями по заданиям с файлами.
Я тут подумал, что может быть некоторые задания из прошлого выпуска все же сложные достаточно. В том плане, что 44.1 пожалуй трудна, а искать решения по нумерологии многие ленятся :) Хотя те, что присланы, очень интересные. Поэтому задание 44.1 объявляется необязательным (лучше сделать, конечно, там немало полезных идей придется применить, практика хорошая). Что касается нумерологии, 43-го, то вместо него кто хочет, может следующую задачу сделать: 43-b. Две армии случайной численностью N и M (N и M меньше 10000) бойцов ведут сражение. В каждый момент времени (один такт игры) каждый одиночный боец первой армии сражается с одиночным бойцом второй армии (один на один). Не принявшие участие бойцы армии, где солдат больше (им не с кем было сразиться), выбирают случайно также по одному врагу и проводят свои бои один на один. После этого ход (такт) заканчивается. Война идет до полного уничтожения одной из сторон. Каждый боец характеризуется начальным запасом здоровья (целое = 100), вероятностью нанесения точного удара, силой этого удара и вероятностью защиты. Эти вероятности одинаковы для каждой из армий. Например, вероятность удара - 70% (целое 70, при проверке бросаем кубик со 100 гранями, меньше или равно 70 - попал), вероятность защиты - 30%. Сила удара может случайно колебаться от 1 до 30 единиц. Схватка один на один так происходит. Сначала случайно выбирается один из двух солдат, кто первый, затем для него проверяется, нанес ли он удар. Если да, то рассчитывается сила удара (бросаем кубик с 30 гранями), после чего проверяется, смог ли защищающийся защититься (с учетем вероятности защиты). Если и защититься не смог, то из его здоровья вычитается поражение. Если его здоровье меньше 1, значит, он убит. Моделируем процесс сражения до конца, численность армий и при желании кто кому какой силы удар нанес и кто защитился, выводим в протокол - например в список, или консольное окно. (c) 2004-2005 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||