Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 50) Где логика и где разум
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!50) Где логика и где разум.* Что такое div в Си Это хитрая вещь, возвращает целую и дробную части от деления двух параметров. Результат - особый сложный тип div_t (со временем доберемся до таких типов, нечто немного более простое, чем объекты :). div_t x; x = div(10,3); x.quot будет целая часть деления (3, 10/3 = 3), x.rem - остаток (1).
* Ой, да, и ещё одно, как сделать так, чтобы твоя "независимая" программа имела в место пресловутой семёрки, иконку которую ты сам создал, чтобы она была записана в этот же ехе. Файл. Ну всё пока. Для текущего проекта выбираем Project - Options, на вкладке Application нажимаем кнопку LoadIcon, и загружаем из внешнего файла иконку (расширение .ico). * Чтобы удалить из списка строку с индексом i...
можно воспользоваться методом Delete: ListBox1.Items.Delete( i );
* У меня возникла проблема. Надо нарисовать график бегущей синусойды и еще 2
синусойды смещенные
относительно друг друга. (есть 360 точек . Рисуем их. Затем получаем 361
точку. 1-ую точку викидываем. В принципе достаточно и обычного PaintBox, хотя он тоже не очень быстрый. А TChart сильно тормозит, да... Если нужно действительно максимальное быстродействие, рекомендую g32.org. Прекрасный и общедоступный набор компонентов, очень шустрый. Спрайтовая графика, богатый набор графических примитивов. Правда, для его установки базовых знаний маловато...
* Я подписался совсем недавно , но первые выпуски
Вашей рассылки я на сайте не нашёл . Где их можно взять ? Все выпуски рассылки тут: http://russianenterprisesolutions.com/sbo/
Вообще накопилось от вас уже много замечательных материалов, и программ, но пока мы должны Базовый курс завершить прежде всего. Поэтому это все готовится! Но сегодня рассмотрим, как вызвать из одной формы другую. Делается это в общем случае так. После того, как главная форма создана, вы можете добавить в проект еще одну (или не одну, сколько хотите) форму командой File - New - Form или просто кнопочкой New Form. В дизайнере появится новая чистая форма (по умолчанию - Form2 и Unit2). Также создаете на ней все, что хотите. Только вызываться она не будет автоматически. А как? Вариантов два. Первый, самый распространенный - вторая форма нужна для задания настроек. Поэтому ее надо показывать как всплывшую поверх основной, причем пока ее мы не закроем, на основную переключиться не сможем. Этот режим называется режимом модального диалога. Допустим, хотим мы форму Form2 показать из основной формы. Создадим в последней кнопку, и в обработчике нажатия на нее запишем
procedure TForm1.Button1Click(Sender: TObject);
ShowModal - это метод показа формы как модального диалога, а Form2 - название нашей второй формы (новый объект программы). Во второй форме неплохо также указать в свойстве BorderStyle значение bsDialog - в стиле окон-диалогов, менять их размеры мышкой нельзя. Однако если попробовать откомпилировать этот код, возможно будет ошибка - компилятор не найдет описание формы Form2. Естественно, ведь она в другом файле, Form2.pas описана. Дельфи 7 предложит поставить ссылку на другой файл автоматически, а в старых версиях можно вручную указать implementation uses Unit2; // вот это добавить, ссылку на модуль Unit2 с описанием второй формы Название модуля мы можем задать сами - когда в первый раз новую форму сохраняем, Дельфи предложит ввести название файла. По умолчанию Form2, но если назовем MoyaForma, то и файл, и модуль так переобзовутся. То есть тогда надо будет указывать: implementation uses MoyaForma; При этом сам объект формы, Form2 ( var Form2: TForm2; ), останется с именем по умолчанию. Его можно изменить, напоминаю, выбрав в инспекторе для соответствующей формы в свойстве Name новое имя (фактически - просто новое имя переменной для формы). Теперь запустим, нажмем кнопку - появится вторая форма. Второй способ. Формы можно делать видимыми и невидимыми на лету. Для этого положено использовать методы Hide (спрятать) и Show (показать). Тогда в основной форме можно так написать:
procedure TForm1.Button1Click(Sender: TObject);
Hide вызывается без явного указания объекта, префикса, потому что записано внутри метода формы Form1 и относится к ней самой. А во второй форме можно на ее кнопке аналогично сделать возврат к первой:
procedure TForm2.Button1Click(Sender: TObject);
Переключаться между формами одного проекта можно так. Вызываем так называемый менеджер проекта, View - Project Manager, и если раскрыть дерево Project1, то в нем окажутся две формы Unit1 и Unit2. При этом каждую из них тоже можно раскрыть, там будут ссылки и на форму, и на программный код. Переключиться к нужной форме - двойной щелчок. В Си, надо просто добавить еще один заголовочный файл, рядом с текущим:
#include "Unit1.h" // этот уже был И в другом файле, Unit2.cpp, также ссылку на Unit1 добавить (если второй способ используется). Элемент управления Переключатель (Radio). Обычно переключатель RadioButton (кружочек такой, внутри которого точка или есть, или нету) не используется в одиночку, как минимум должно быть два или более таких элементов, так как они предназначены для единственного выбора из множества альтернатив. Поэтому более удобен компонент RadioGroup с панели Standard. Поместим его на форму, после чего зайдем в свойство Items - там справа будет три точки-кнопочка, вызовем ее - диалог появится, и в каждой строке запишем название одного из вариантов выбора. Например, предлагаем выбрать язык Си, Паскаль или Бейсик. Так и записываем в три строчки, после чего жмем ОК - и на форме готовый элемент выбора из трех вариантов. Узнать, какой элемент выбран, можно, обратившись к свойству под названием ItemIndex компонента RadioGroup. Если оно равно -1, значит, ни один не выбран из доступных. Кстати, в это свойство можно записать -1, чтобы сбросить текущее выделение. Если больше или равно нулю (нумерация переключателей с нуля!), значит, есть выбор. А получить название выделенного элемента можно например так:
var s: String; Только предварительно надо проверить, что что-то выбрано. И задания. Задание 42. Камень-Ножницы-Бумага. Сделайте игру "Камень-Ножницы-Бумага". Человеку предлагается выбрать свой вариант хода из трех возможных переключателей (radioGroup), после чего компьютер случайно выдает свой ответ (по честному!) и проверяет, кто у кого выиграл. Надо вести статистику матча -какой общий счет между человеком и компьютером. Кстати, будет интересный эффект - человек не может абсолютно случайно предлагать варианты, обязательно неправильно работающий ум будет какие-то закономерности выискивать. И в результате честный случайный компьютер обыграет человека на большом числе партий! Предусмотрите также уровни сложности (с помощью скроллбара - а лучше, есть его неплохой и более наглядный аналог TrackBar с панели Win32, тоже Max, Min и Position главные свойства) - например, чем выше сложность, тем компьютер чаще начинает жульничать :) Типа, сначала смотрит, что человек ответил, а затем выбирает выигрышный для себя ответ. Напоминаю, Камень ломается о Ножницы, Ножницы режут Бумагу, а Бумага заворачивает Камень. Задание 43. Приближение к Курсу второго этапа :) Школе программирования с Единицы :)
724. Нумерология На самом деле алгоритм такой немногим сложнее, подозреваю, рассмотренного нами расчета триграмм :) Вам надо найти описание алгоритма нумерологии и реализовать его в симпатичном оформлении. Наверно, достаточно дать на яндексе запрос соответствующий, и куча ссылочек появится. Кстати, у кого есть желание, может оформить и по триграммам в красивом интерфейсе. Задание 44. Пивной завод. Это два задания с одной из областных Пермских олимпиад, но так как они для нас уже легкие :) объединяем их в одно. Точнее, первое будет просто для разминки. 44.0. “Лямзики”. Лямзики — это протобионтные организмы, обитающие на далекой планете. Существует три вида лямзиков — красные, зеленые и голубые. Изначально в колонии могут находиться представители двух или всех трех видов. Но если два лямзика разных цветов встречаются, то они сливаются, образуя организм третьего цвета (например, встреча голубого и красного приводит к образованию зеленого). Наступает момент, когда колония становится одноцветной. Написать программу, которая по введенным целым неотрицательным значениям численности красных, зеленых и голубых лямзиков определяет все возможные конечные цвета колонии.
Пример работы правильной программы:
Кроме того, дополнительно сам процесс взаимодействия надо выводить например в список. В каждой строчке что-то типа
44.1. “Два конвейера”. Технические требования Формат входных данных Формат выходных данных Пример работы правильно написанной программы: На практике умения решать/программировать задачи на перестановку, комбинаторику, перебор вариантов - очень востребованы. В любой программе, где кончается тупой учет и начинается мало-мальски простой интеллект, возникает нужда в переборах, поиске вариантов. Очередные решения. У Тани begin.polubomu.ru выложены дополнительные решения по 24-е включительно. Кстати, она, пройдя курс (мой :) "Программирование для Интернета", сделала на сайте интерактивный опрос, кому какая система нравится. И народу много ответило! 29. Перемножить матрицы
#include <iostream.h> На Паскале.
program MultiplyMatrix;
{$APPTYPE CONSOLE}
uses
var A,B,C:array[1..100,1..100] of Integer;
begin 30. Расчет суммы окружающих элементов.
#include <iostream.h> На Паскале:
program AddElements;
{$APPTYPE CONSOLE}
uses
var A,B,C:array[1..100,1..100] of Integer;
begin
write( ' All done ... ' );readln;
Кстати, иногда можно немного модифицировать условия задачи, чтобы существенно упростить код. Основная сложность в этом упражнении была в том, что иногда индексы массива выходили за границы, и это приходилось явно отслеживать. Например для элемента 1,1 индексы часто принимали значения 0,1 , 1,0 итд. А так как массив мы описали размером от 1 до 100 по каждому измерению, возникают проблемы, приходится условные операторы добавлять.
2. В 30-ой задачи базового курса пришлось матрицу А сделать не
[1..100,1..100], a [0..101,0..101] – правильно - неправильно. Вот!!! Описать массив не (1-100,1-100), а (0-101,0-101). Конечно, правильно! По каждому измерению на 1 больше и меньше. И при инициализации массива в эти граничные строки записать нули. Тогда цикл мы делаем от 1 до 100 по каждой границе, а внутри него уже можно смело суммировать все 8 окружающих элементов, не опасаясь, что индекс выйдет за границы. Для элемента 1,1 ведь элемент с индексом 1,0 уже будет существовать, и проблем с его суммированием не будет (а он все равно ноль). В коде же все лишние условные операторы можно убрать. Оптимизируем не 5 строк кода, а сразу 50 !!! А лучше 500 :) Алгоритмически подходим, не на уровне кода мыслим, а немного повыше :) На эту тему, правильного мышления :) мы еще поговорим поподробнее не раз после базового курса. Только базовых, простейших способов мышления, логического рассуждения, существует двенадцать. А если чуть-чуть отойти подальше от входной калитки на тропинку, направляющуюся в небольшой областной центр огромного мира Интеллекта, то уже на порядок их число возрастает. А мы пользуемся от силы двумя-тремя. Не подозревая, что у нас в голове скрыт, дремлет древний мир с удивительным потенциалом. Есть, например, известный наш академик, слепой с детства. Участвует в разработке различных госпрограмм. В уме за две минуты решает интегралы, над которыми коллективы профессоров-математиков бьются по две недели. И это каждый может! Развить свое мышление до более-менее приближенного к Человеческому. А не оставаться на хомячьем уровне :) Только не спрашивайте у меня "чё за типы мышления, раскажи типа паканкретнее" :) Сам такой вопрос - свидетельство того, что человек не готов воспринять ответ правильно :) И поэтому расходовать на него ресурсы бессмысленно. А кто хочет, сам найдет. Или подождет. Те же, кто говорит, что какие-то выдающиеся умственные способности - это только для избранных, врут! Лично свидетельствую, как после десятка упражнений получасовых люди резко :) увеличивали свой интеллектуальный потенциал. Правда, для этого специальная аппаратура нужна, пока дороговатая, но это уже другой вопрос. Кроме того, в последние годы серьезно развились чисто западные, инструментальные подходы к оптимизации человеческого мышления, математическая логика за счет финансового интереса к компьютерным технологиям, где формальная логика - базис, очень мощно развивается. Мы это все рассмотрим применительно к программированию. Вот на филфаках изучают теоретические аспекты логики, но увы, до практики это все далеко. Еще десятки лет назад разработаны технологии подготовки программного кода, гарантирующие, что этот код будет без ошибок (без выхода индексов за границы, без бесконечных циклов, без переполнения переменных итд). Но увы, на практике они не применяются, потому что теория - одно, а вот реализация ее в конкретных задачах - совсем другое. Мы же пойдем именно от практики. А, например, достижения стеганографии привели к тому, что двое могут общаться в чате, и даже если за спиной каждого стоит надзиратель, он все равно ничего не заметит - только невинные переговоры про погоду. А на самом деле передана неким встроенным алфавитом куча инфорации - пароли, явки :) Но халявы не будет! Сразу предупреждаю! :) Просто потому, что на халяву не стать мастером спорта. Если есть от природы данные, как у академика нашего, это одно. Но он рассылками такими и не интересуется :) Проблема не в том, что уровень мышления академика - высокий. А в том, что наше мышление очень слабо и совершенно не развито. Если ноль умножить на тысячу, все равно ноль будет. Его не умножать надо на тысячу, а складывать с ней. Постепенно. А мы сразу пытаемся умножить, развить то, чего пока нету :)
Я смотрел, как они работают со словом. Я пришел, а они в течение
трех часов вытаскивали цепочку, которую породили два слова, сказанные
одним из присутствовавших. И они ее вытащили. Это была мысль, которая
возникла у этого человека три с половиной месяца назад. Это работа
фантастически щепетильная. Я там не решился ни одного слова произнести.
Они тут же отметили это, сказали: "Блокировочка". Они красиво работают.
У них культура мышления, культура употребления слов. По сравнению с их
искусством отслеживать, откуда взялась мысль, психоанализ - это детский
лепет на лужайке... Есть даже мнение, что подобные люди способны в уме взламывать любые современные системы шифрования. Им это просто не надо и заставить их невозможно такую работу делать :) А сколько известно людей, вычислявших например огромные числа быстрее компьютера?
Вот рассказ об эксперименте, проведенном одним из исследователей с мадемуазель Осака. Испытуемую просили возвести в квадрат 97. получить десятую степень того же числа. Она делала это моментально. Затем предлагали извлечь корень шестой степени из 40 242 074 782 776 576. Она отвечала тотчас и без ошибок. Это не фокус, потому что числа выдавались случайно. Это ФАКТ научный, не муть мистическая, не дешевка, открытая каждому представителю хомячьих :) где каждый мнит себя учителем высокодуховным, но при этом ничего выдающегося и одновременно измеряемого объективно не в силах продемонстрировать. Не слушайте хомяков, в общем :) А развивайте свой ум! У вас (у нас :) уже есть ВСЕ в голове. Никуда не надо мчаться за щастьем :) С помощью программирования, прежде всего, потому что сегодня это - единственная, пожалуй, сфера, предоставляющая ничем не ограниченные возможности для проявления способностей интеллекта (и достижения финансового благополучия :). Реально измеряемых и поэтому не дающих возможности переоценить свои ресурсы. Ну например. Есть программа, которая хорошо продается. Делал ее коллектив из десяти разработчиков целый год. Конкурентов нету, потому что нужны инвестиции, чтобы что-то подобное сделать. Но вот есть академик :) который алгоритм придумает гораздо более лучший и простой. Который не надо реализовывать целый год, а можно одному написать за месяц. Просто академику это не надо :) Но мы можем его способ мышления смоделировать и взять на вооружение. Конечно, если программа - автоматизация завода, то там только рутинная, техническая работа, никакой мысли. Но есть куча областей (наукоемких :), где ситуация прямо противоположная. Хомяк еще там не валялся:) Вот Алексей прислал задачку:
Между пунктом А и В расстояние 20км, между ними, посередине, находится
пункт D. Из пункта А в пункт B со скоростью 5км/ч выходит мальчик. Она известная, но если не знаете, попробуйте решить без интегралов :) Одна из программ с искусственным интеллектом, обученная такие задачи решать, нашла решение в одно арифметическое действие. Это подсказка :) 31. Поменять столбцы.
function exchangerow()
Максим Кибермаксович На Си:
Меняю 3 и 1: На Паскале:
const
procedure TForm1.Button3Click(Sender: TObject);
Лена 28 - максимальный элемент матрицы. Оригинальный способ визуализации придумал Алексей:
Я начал с 28, а следующие происоединил сюда же в одну программу. Как от само собой получилось. (Я еще спрашивал как увидеть происходящее на экране.) Один способ я нашел.
var Matrix: array [1..100,1..100] of Real;
end;
(c) 2004-2005 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||