Понедельник, 08 Сентября 2025, 00:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
nilremДата: Пятница, 20 Ноября 2009, 19:40 | Сообщение # 921 | Тема: Бан лог
Просветленный разум
Сейчас нет на сайте
monk007 - бан 10 дней.

Quote (Gnomov)
Следи за грамматикой – не нарушай правила!

Ответ: Ага.. Делать мне больше нех!


Windmill 2

WindMill 2D Game Engine
nilremДата: Пятница, 20 Ноября 2009, 19:13 | Сообщение # 922 | Тема: Обсуждение курса "Основы С++ для начинающих..."
Просветленный разум
Сейчас нет на сайте
vc,
Во-первых, я несколько раз упоминал про функции, говоря что расскажу о них позже. Функциям будет посвящена следующая лекция, курс ведь еще не завершен. Ты бы хоть читал внимательнее.
Во-вторых, термин наследственность(Heredity) никакого отношения к программированию не имеет.
А вот Объектно-ориентированному программированию вообще, и Наследованию(Inheritance) в частности, будет посвящена вторая часть курса, в рамках которой мы будем делать тактическую ролевую игру Zurk. Заражение


Windmill 2

WindMill 2D Game Engine
nilremДата: Пятница, 20 Ноября 2009, 17:57 | Сообщение # 923 | Тема: Свои фото
Просветленный разум
Сейчас нет на сайте
Quote (Master_Chief)
TLT, это что-то новенькое

Почему. Сотню лет назад так поголовно все племена американских индейцев думали.


Windmill 2

WindMill 2D Game Engine
nilremДата: Пятница, 20 Ноября 2009, 14:52 | Сообщение # 924 | Тема: Как воспринимать критику
Просветленный разум
Сейчас нет на сайте
Все любят критиковать, это черта сидит у нас где-то глубоко в душе, иногда вылезая наружу и пытаясь кому-то нагадить.
Этому кому-то приходиться либо терпеть, либо отвечать. Причем часто ответ звучит в довольно грубой, оскорбительной форме. Как результат - предупреждения, замечания, баны. Как следствие - обида на весь мир.

Поэтому, дабы облегчить вам жизнь, привожу здесь небольшую статью Шушоны.
Прежде чем нагрубить какому-нить новоявленному критику, прочитайте то, что написано ниже. Улыбнитесь, и обида пройдет. Если не прошла, воспользуйтесь предложенными советами)
Да и Вы, критики. Будьте благосклоннее.

(Советы касаются не только литературного творчества, но критики вообще)


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

1. Вас тут не стояло! (откуда вы взялись на мою голову, я ваш ник знать не знаю, хотя сам на этой ДО в первый раз)
2. Меня критиковать нельзя, я маленький! (старенький, болезненненький, ниеннист, недавно вспомнил себя)
3. Я сюда повесился не для того, чтобы меня читали!
4. В очередь! (я вас не просил, а вы меня все равно критикуете...)
5. Ну и что, что я не стихи пишу, а квакаю? Все равно я квакать умею, а вы - нет!
6. А вы сами-то ручку хоть раз в руках держали?.. Знаете, как это сложно?! Она тяжелая и все время падает! (...клавиатуру в глаза видели?.. Знаете, как трудно одним пальцем по ней стучать?!)
7. Не надо меня ни с кем сравнивать, мировая культура сама по себе, а я сам себе мировая культура! (X устарел, Y я читать боюсь, а Z вообще критики придумали - специально, чтобы меня напугать...)
8. Вы завидуете тому, что я такой талантливый! (сообразительный, с красивым именем, умею писать буковками, меня за сегодня похвалило целых 4,5 разных человека!..)
9. Не плюйте в мою возвышенную душу своим циничным прагматизмом! (Все равно не доплюнете и все равно я ядовитей!!)
10. Ничего, не переживайте, гениев всегда только после их смерти (смерти их критиков) оценивают.
11. Ну вот, я вам рассказал, как меня на костре сожгли (главным назгулом избрали, весь мой народ за два часа орлами сожрали, любимой девушкой отравили, крылья на сувенирные перья растащили) - а вы смеетесь!!
12. (со слезой в голосе) Вяу-вяу, я Ваши стихи хвалил-хвалил, под них подделывался-подделывался, а Вы меня не только не хвалите, но и подделываться под мои стихи не хотите, и еще чем-то непонятным обзываетесь - "эпигон"... (на этом месте критик должен разрыдаться и перевоспитаться)
13. Сам я хромой, зато душа у меня прыгучая и летучая!!

А теперь - несколько советов оборонительно-наступательного характера.

1. Всегда отвечайте добром на зло, и в ответ на совет немедленно вытереть свой тихий ужас с этой ДО, положите туда еще 20 штук своих высококачественных произведений.
2. В ответ на циничную брань критика сходите к нему в раздел и искренне похвалите его так, чтобы он сам повесился.
3. Убейте критика своей кротостью. Немедленно согласитесь пересмотреть свои взгляды и через каждые два часа спрашивайте, правильно ли вы это делаете...
4. Влюбитесь в вашего критика, объявите его своей лучшей второй половиной по прошлой жизни, невзирая на оскорбленные вопли последнего, и засыпьте его посвященными ему стихами собственного изготовления и соответствующего содержания.
5. Натравите на критика всех своих лучших друзей. Желательно, тоже пишущих. Пусть наглядно убедится, что вас много, а его мало, и уже поэтому он в корне неправ. (Если друзей у Вас не хватает для массированной атаки - размножьтесь и заведите полтора десятка виртуалов, которые будут хором хвалить Вас с разных компьютеров, пока у критика не начнется головокружение.)
6. Объявите критика Злобным Инфернитом и пообещайте наслать на него порчу, ни в коем случае не смущаясь тем, что достаточно испорченного инфернита испортить еще круче вряд ли удастся.
7. Заведите себе карманного дружелюбного критика, и при каждом новом наезде предъявляйте общественности, гордо приговаривая: "А я уже!"
8. Объясните, что Вы сам себе не только мировая культура, но и критик, после чего смело начинайте критиковать манеру критиков критиковать Вас.
9. Запомните: главное в стихотворении - не форма, а форум. (На котором принято хвалить все человекочитаемые произведения как факт...)
10. Пригрозите критику повеситься (перегрызть вены, утонуть в ванной, наесться дихлофосу, зарезаться бандитами, съесться хоть каким завалящим тигром, выпрыгнуть с первого этажа и насмерть застрять в клумбе, замерзнуть непосредственно под забором у критика, посмертно отбить лавры у Анны Карениной, подавиться с летальным исходом горькими невысказанными упреками, погибнуть в неравной схватке с электрическим током, объявить себя очередной инкарнацией Элхэ и помереть просто так, потому что время пришло), если он немедленно не согласится пересмотреть всю свою прошлую жизнь, включая взгляды на Вас, критикуемого, в частности.
11. Объясните критику, что его сначала подкупили, а потом подослали враги, и поэтому он права голоса не имеет и будет отвечать по какому-нибудь закону.
12. Скажите критику, что его время прошло, а Вы - молодое поколение графоманов от Бога, и предложите ему самоустраниться, пока безбожным графоманом не объявили его.

Шушона ©


Тему закрепил. Пользуйтесь.


Windmill 2

WindMill 2D Game Engine
nilremДата: Пятница, 20 Ноября 2009, 13:32 | Сообщение # 925 | Тема: Как создать MMO RPG типа Wow?
Просветленный разум
Сейчас нет на сайте
Quote (Children_of_Bodom)
Подскажите прогу))

А может лучше книгу или статью про создание игр вообще.
MMORPG это самый сложный жанр требующий как уйму знаний так и материальных ресурсов(минимум на сервер).
Что ты знаешь о разработке игр?
Если хоть что-то, то вон тебе уже RealMCrafter посоветовали.)


Windmill 2

WindMill 2D Game Engine
nilremДата: Пятница, 20 Ноября 2009, 12:50 | Сообщение # 926 | Тема: Попытка записать аудиокнигу.
Просветленный разум
Сейчас нет на сайте
Есть на сайте такой раздел - Подкастинги. Но, к сожалению, он не особо развивается. Хотелось бы этому немного поспособствовать. Правда, прежде чем этим заняться, мне нужно немного поработать над русской речью.

С этой целью и пытаюсь сделать аудиокнигу.
Первая запись вообще была ужасной. Со стороны звучало так, будто говорит какой-то недОумОк. Зато потом, поняв некоторые ошибки, я начал исправляться.

В общем, представляю на ваш суд последний вариант:

Аудиокнига из цикла Летописи Сениила – Синеволосый маг. Первая глава. (10 мб)

Про Окание я и сам прекрасно знаю и борюсь с ним по мере своих сил. Дошло до того, что в тексте пишу так же, как и праизнашу.
Надеюсь, вы укажете мне на остальные баги моей речи.

На 10 минут записи понадобилось около часа. Ни один фрагмент не был записан с первого раза, но и больше трёх попыток я ни на что не тратил.
К сожалению, из-за кривости моих рук в обращении с Адоб Аудишином, подозреваю, что при удалении фонового шума, запись практически полностью утратила оригинальную интонацию. Только изредка она пробивается.

Ну и по книге. Как же не пропиарить то себя любимого. Первая глава в записи представлена в виде, идентичном тому, что размещен на сайте proza.ru, то есть черновик. Финальная версия текста имеет некоторые отличия и большую длину. Так что я поленился, и взял то, что короче. Главное, что смысл сохранен.
По тексту. При прослушивании может возникнуть проблема с именами. Слишком они похожие. Дело в том что имена за букву З(зэ) пользуются в Сенииле особой популярностью. Вот и собралось несколько таких в храме.

Чтоб было проще(Прочитать до прослушивания):

Зендер – Наш жених-самозванец. Главное действующее лицо.
Зерат – Паладин. Генерал Ордена. Начальник городской стражи. На самом деле он умный, но из тактических соображений это успешно скрывает.
Зейра – Чародейка, которая первая раскусила маскировку самозванца. Магистр восьмого уровня. Член магического совета.
Зулаг – Магистр седьмого уровня. Еще один член совета.


Windmill 2

WindMill 2D Game Engine
nilremДата: Среда, 18 Ноября 2009, 17:56 | Сообщение # 927 | Тема: 2D RPG со своей РПГ системой, гемплеем
Просветленный разум
Сейчас нет на сайте
Лучше бы мне с Зурками помогли.

Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 23:47 | Сообщение # 928 | Тема: Женский геймдев
Просветленный разум
Сейчас нет на сайте
Есть такая замечательная серия книг по компьютерной графике - GPU Gems

В этих книгах в самом начале печатают список авторов, работавших над разделами.
Так вот в первой книге, от 2004 года среди авторов женщин нет.
Во второй, от 2005, - одна.
Третья книга, 2007 год, - пять.


Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 22:26 | Сообщение # 929 | Тема: Elien game
Просветленный разум
Сейчас нет на сайте
Скоро появится культ Унрыльщиков. Затем новая религия - Унрилизм или Унрилянство.
Похоже имеем дело с планом захвата человечества Epic Games. У них уже вроде 50 тыщь последователей.
С Professor-ом, еще ++.

Quote (Professor)
Окулист ненадо меня учить что делать!!!! у самого еще ничего нет готоыого а учить уже умеет!!!!!!!!!!! вот нород повелся))) был бы я админом я бы тебя давно забанил!!!!!!!!!!!!

Йоу. На лицо оболванивание. Точно культ или секта.


Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 22:20 | Сообщение # 930 | Тема: Мы набираем команду для разработки большой игры!
Просветленный разум
Сейчас нет на сайте
Quote (Semag)
Сколько стоит?

А что, предполагается оплата, т.е. проект коммерческий?


Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 21:41 | Сообщение # 931 | Тема: Мы набираем команду для разработки большой игры!
Просветленный разум
Сейчас нет на сайте
Quote (Semag)
Продолжать?

Ага, только конкретизируй.
Что за жанр, сюжет. На чем делается игра.
В общем, в идеале, давай все, что есть.
Так ты привлечешь к проекту больше людей.


Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 21:28 | Сообщение # 932 | Тема: Мы набираем команду для разработки большой игры!
Просветленный разум
Сейчас нет на сайте
Хотелось бы услышать больше про саму игру.

Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 16:51 | Сообщение # 933 | Тема: Сообщество игроделов на GcUp.ru
Просветленный разум
Сейчас нет на сайте
Quote (TrueIfrit)
как ты этого добился?

Могу предположить:
1. Сайт уникальный, других такой тематики и с таким набором контента нет.
2. Имя не юкозовское.


Windmill 2

WindMill 2D Game Engine
nilremДата: Вторник, 17 Ноября 2009, 00:25 | Сообщение # 934 | Тема: Новая структура форума.
Просветленный разум
Сейчас нет на сайте
Gnomov,
Слишком много. Будут пустовать разделы.


Windmill 2

WindMill 2D Game Engine
nilremДата: Понедельник, 16 Ноября 2009, 22:09 | Сообщение # 935 | Тема: Новая структура форума.
Просветленный разум
Сейчас нет на сайте
Quote (TLT)
Только мы так и не решили как классифицировать и разделять языки.

Устроить опрос, для популярных языков создать разделы.
Думаю будет нечто вроде:

C++ & Visual C++

Pascal & Delphi

HTML & JS & PHP

Other...

Потом из другого выделять для популярных языков еще разделы


Windmill 2

WindMill 2D Game Engine
nilremДата: Понедельник, 16 Ноября 2009, 00:10 | Сообщение # 936 | Тема: Karma Studios
Просветленный разум
Сейчас нет на сайте
Завязываем оффтопить.
Тема закрыта.


Windmill 2

WindMill 2D Game Engine
nilremДата: Воскресенье, 15 Ноября 2009, 23:47 | Сообщение # 937 | Тема: Dead World - [Fps]
Просветленный разум
Сейчас нет на сайте
jekastudio,
Еще раз выложишь такой большой скрин - задушу.
Извинения не помогут.


Windmill 2

WindMill 2D Game Engine
nilremДата: Воскресенье, 15 Ноября 2009, 19:44 | Сообщение # 938 | Тема: Я удалил DX прогой DirectX Killer. Что делать?
Просветленный разум
Сейчас нет на сайте
Пуск-Все программы-Стандартные-Служебные-Восстановление системы.

Windmill 2

WindMill 2D Game Engine
nilremДата: Воскресенье, 15 Ноября 2009, 19:04 | Сообщение # 939 | Тема: Zurg. Заражение
Просветленный разум
Сейчас нет на сайте
Обновил первый пост. Добавил две расы, ресурсы и юниты для двух рас.

Windmill 2

WindMill 2D Game Engine
nilremДата: Воскресенье, 15 Ноября 2009, 17:23 | Сообщение # 940 | Тема: Курс : "Основы С++ для начинающих программистов игр."
Просветленный разум
Сейчас нет на сайте
Лекция 5. Знакомьтесь - Функции.

Здравствуйте.
На третьей лекции вы познакомились с циклами. То есть со способами многократного повторения одного определенного блока кода. Давайте представим себе такую ситуацию. Допустим нам необходимо повторить этот блок кода несколько раз но не в одном месте, а в различных частях программы. Конечно, можно просто написать его несколько раз, более того можно просто этот код скопировать. Но есть способ эффективнее и проще – использовать функции.

Урок 1. Функции

Когда программы становятся очень большими в коде реально можно потеряться. Единственный способ избежать подобных неприятностей, это разделить программу на несколько частей, и работать с ними по отдельности. Этими частями и будут функции. Такой способ программирования называют Процедурным программированием.(Процедура и функция это одно и тоже).
Что же такое функция, по-простому это отдельный блок кода, имеющий определенное назначение, то есть выполняющий какую-то задуманную программистом работу.
Вообще-то с функциями мы уже встречались. Вспомните, когда мы работали с генератором случайных чисел, мы получали системное время с помощью функции time(), устанавливали начальное значение генератора с помощью функции srand(), ну а само число получали с помощью rand().

Использование функции можно разделить на три этапа:
1. Объявление функции
2. Определение функции
3. Вызов.

Объявление функции

Объявление сообщает компилятору о существовании некой функции. Вот синтаксис:

Code

Тип_возвращаемого_значения  имя_функции(список агрументов);

Здесь:
Тип возвращаемого значения – это тип переменной, которую возвращает функция по завершению своей работы. Как я уже сказал, у каждой функции есть свое назначение, она выполняет определенную работу. Возьмем простой пример – функция умеет суммировать два целых числа. Результат этого сложения и будет возвращен в виде целого числа.
Имя функции – это и есть имя. Ведь к функции как то нужно обращаться. К именам функций применимы те же требования что и к именам переменной. Помните главное - имя должно быть понятным.
Список аргументов(еще называют параметры функции) - это записанные в скобках передаваемые функции значения, попросту говоря это список переменных над которыми эта функция будет совершать определенные действия. Объявляются эти аргументы так же как и обычные переменные, и дальнейшем используются внутри функции. Несколько аргументов отделяются друг от друга запятыми. Количество аргументов не ограничено, но им может и не быть вовсе.
И обращаю ваше внимание, что завершает объявление уже знакомые нам точка с запятой.
Пример объявления функций:

Code

void print();

Подобную запись еще называют прототипом функции. Здесь у нас объявлена функция которая не возвращает никакого значения( тип void – пустой тип) и не принимающая ни одного аргумента. Судя из названия, функция умеет что-то там печатать.

Code

int sum(int a, int b);

Это уже немного описанный пример. Функция имеет два аргумента типа int. В результате своей работы она возвращает целочисленное значение (int).
При объявлении в списке аргументов функции имя переменной можно не указывать, то есть достаточно только указать тип данных. Вот так:

Code

int sum(int, int);

Здесь имена a и b отсутствуют, но они в прототипе не очень-то и нужны. Функций мы еще наобъявляемся, так что не будем тратить время и двигаемся дальше.

Определение функции

Итак, функцию мы уже объявили. Компилятор уже знает о ее существовании, но понятия не имеет, как она работает. Весь, принадлежащий функции код это и есть определение, по-другому реализация, функции.
Синтаксис такой:

Code

Тип_возвращаемого_значения  имя_функции(список аргументов)
{
  Блок кода;
}

Здесь мы может видеть уже знакомое нам объявление, но без завершающей точки с запятой. Далее в фигурных скобках идет принадлежащий функции код, то есть определение функции.
По-моему все просто, поэтому перейду сразу к примеру. Ранее мы объявили функцию sum(), сейчас напишем ее определение.

Code

int sum(int a, int b)
{
  return a + b;
}

Аргументы int a, int b используются в функции как обычные переменные.
Как мы уже знаем, функция возвращает определенное значение. Для этих целей в примере мы и видим оператор возврата - return.
Синтаксис оператора следующий:

Code
return возвращаемое значение;

Возвращаемым значением также может быть и любое выражение, как в нашем примере это a + b. Оператор возврата имеет самый низкий приоритет, то есть будет выполнен только после того, как все выражение будет вычислено.
Запомните, тип возвращаемого значения обязательно должен соответствовать типу, указанному в объявлении функции.
В одной функции может содержаться несколько операторов return. Чаще всего в следующей конструкции:

Code

if(условие)
{
  return значение;
}
else  
{
  return значение2;
}

Здесь возвращенное значение зависит от заданного условия.

Вызов функции.

Чтобы воспользоваться функцией, необходимо произвести ее вызов в нужном месте программы. Для вызова используется следующий синтаксис:

Code

имя_функции (значение1, значение2, …)

Здесь количество и тип значений должны соответствовать количеству и типу аргументов, объявленных в прототипе вызываемой функции. То есть, для объявленной ранее функции

Code

int sum(int a, int b);

вызов будет таким:

Code

sum(5, 8);

Даже если функция не имеет аргументов, круглые скобки при ее вызове писать обязательно.
Кроме чисел функции также можно передавать переменные соответствующего типа:

Code

int x=10;
sum(x, 156);

Использование функций.

Ну а теперь напишем небольшую программу, в которой используем все, с чем познакомились ранее.

Code

#include <iostream>
using namespace std;

int sum(int, int);    //обьявление(прототип) функции

void main()
{
  setlocale(0,"");

  int a;
  int a2;
  int b;
  cout<<"Введите первое число ";
  cin>>a;
  cout<<"Введите второе число ";
  cin>>a2;
  b = sum(a,a2);    // вызов функции
  cout<<"Сума двух чисел "<<b;
  cin.get();
  cin.get();
}

int sum(int a, int b)    //определение(реализация) функции
{
  return a + b;
}

В этом примере мы видим все, о чем говорили ранее. Объявление, определение и вызов.
В строке:

Code

b = sum(a,a2);    // вызов функции

возвращенный функцией результат присваивается переменной b.

Пример неплохо иллюстрирует учебный материал, но созданная нами функция бесполезная. Более того, код примера неэффективный и некорректный, поэтому далее, чтобы получше освоить функции и получить еще крупицу опыта, мы его улучшим.
Говоря об эффективности, я имел в виду, что в примере есть бесполезные строки кода, ненужное объявление переменных и другое. От всего этого можно и даже нужно избавится, сделав нашу программу компактнее и быстрее(чисто теоретически, поскольку кода мало и повышение производительности никто не заметит.)
Теперь о корректности. В программе наличествует ввод данных. Подразумевается, что будет ведено какое-то число. Но что если пользователь случайно введет какое-то левое значение?
В программе произойдет сбой. А это не есть хорошо. Поэтому сейчас нам необходимо сделать соответствующую проверку. Поскольку, в случае ввода неверного значения программа должна запросить его повторно и вводить нам нужно несколько значений, получение и проверка данных от пользователя будет производиться внутри одной функции GetDigit(). Вот ее код:

Code

int GetDigit()
{  
  bool r=true;   
  char c[20];
  cout<<"Введите число ";
  while (r)   // основной цикл   
  {
   cin>>c;    // ввод
   for(int i=0;c[i]!='\0';i++)    // цикл анализа
   {
    if(isdigit(c[i]))  // проверка цифра или символ
    {
     r=false;
    }
    else
    {
     r=true;
     cout<<"Повторите ввод (число давай) ";
     break;    // принудительное завершение цикла анализа
    }
   }
  }
int i= atoi(c);
  return i;    // возврат числа
}

Работает она следующим образом. Вначале запрашивается ввод. Далее, внутри основного цикла, введенные данные присваиваются переменной с, являющейся массивом символов. Даже если пользователь введет корректное число, все равно оно будет записано в памяти как набор символов. Это необходимо для того, чтобы:
1. При вводе символа не произошел сбой(при попытке присвоить числу значение, содержащее не цифры а символы.)
2. Чтобы мы могли выполнить анализ.
Далее в еще одном цикле,

Code
for(int i=0;c[i]!='\0';i++)    // цикл анализа
   {
    if(isdigit(c[i]))  // проверка цифра или символ
    {
     r=false;
    }
    else
    {
     r=true;
     cout<<"Повторите ввод (число давай) ";
     break;    // принудительное завершение цикла анализа
    }
   }

до тех пор, пока не встретится конец строки(нулевой символ '\0' ) производится анализ массива. Выполняется проверка каждого элемента на то, является ли он числом или символом. Делается это с помощью стандартной функции isdigit(), возвращающей true если проверяемый символ – цифра. В этом случае анализ продолжается, и если все символы цифры, условие продолжения основного цикла (переменная r) становится ложным.

Если же функция isdigit(), возвращает false, условие продолжения основного цикла вновь становится истинным, выводится предложение повторно ввести число, и цикл анализа принудительно завершается оператором break. Принудительное завершение необходимо потому, что после символа может встретится опять цифра и условие станет ложным, тогда как на самом деле ввод то некорректный.

После завершения основного цикла мы должны возвратить значения.

Поскольку с это массив символов(строка), а нам нужно число, чтобы выполнить соответствующее преобразование, используется еще одна стандартная функция atoi().
(Прототип int atoi(const char *str); Функция принимает указатель на строку, а возвращает число)
Она умеет превращать последовательность символов в число, при условии что символы – цифры. Иначе будет возвращен 0. Здесь нужно быть осторожным, поскольку можно запутаться, ведь строка тоже может быть «0». (Можете сами добавить соответствующую проверку, я этого делать не буду, а ниже приведу более сложный вариант функции GetDigit().)

Code

int i= atoi(c);
  return i;    // возврат числа

здесь с – имя массива, по совместительству являющееся также и указателем.

Эту запись можно сократить, ведь абсолютно незачем использовать лишнюю переменную

Code

  return atoi(c);    // возврат числа

Здесь напрямую возвращается результат работы функции atoi©. То есть, можно сказать, что после выполнения работы функция замещается значением возвращаемого ею типа. Поэтому ее и можно использовать в тексте программы непосредственно как значение:

Code

b = sum(5,10)* sum(5,3);

аналогом этой записи будет

Code
b = 15 * 8;

то есть:

Code
b = (5+10) * (5+3);

Надеюсь это уяснили. Теперь внесем в нашу программу изменения, задействуем созданную нами функцию GetDigit(). Не забудьте добавить ее объявление. Теперь функция main() примет такой вид:

Code

void main()
{
  setlocale(0,"");
  int a, a2;
  a=GetDigit();    // ввод первого числа
  a2=GetDigit();    // ввод второго числа
  cout<<"Сума двух чисел "<< sum(a,a2);    // вызов функции
  cin.get();
  cin.get();
}

Здесь переменные a и a2 получают корректное значение, возвращенное нашей функцией.

ЗАДАЧКА.
До сих пор я не давал вам домашних заданий. Пора это менять. Итак, небольшая задачка. Измените приведенный выше пример так, чтобы переменная а2 оказалась ненужной.

Ну а теперь обещанный мной более продвинутый вариант функции GetDigit().

Code

int GetDigit()
{
  int d;
  cout<<"Введите число ";
  while (true)
  {
   cin >> d;
   if ((cin.peek() == '\n'))
    break;
   else
   {
    cout << "Повторите ввод (ожидается число ) " << "\n";
    cin.clear();
    while (cin.get() != '\n')
    {

}
   }
  }
  return d;
}

Я не буду вам объяснять как она работает. Вы должны попытаться разобраться в ней сами. В этом вам поможет встроенная в студию справка, или если у вас нелады с английским то Интернет.
Основное внимание в этом примере следует уделить новым функциям:
cin.peek()
cin.clear()
cin.get()

Правда с последней вы уже знакомы, но вот что она делает на самом деле вряд ли знаете.

Ах да. Я же на протяжении стольких уроков так и не рассказал, как пользоваться справкой . Виноват. Исправляюсь. Хотя там и рассказывать особо нечего.
Как и во всех других Windows приложениях, справка в студии вызывается нажатием клавиши F1. При этом справка здесь умная. Во вновь открывшемся окне выдается информация об элементе, который в данный момент является активным. Чтобы получить информацию о неизвестной вам стандартной функции языка, достаточно поместить на нее курсор и нажать вышеупомянутую клавишу.

И оп…
Мы получаем всю возможную информацию о данной функции, а также пример ее использования, правда, чаще всего на английском.

Кроме получения информации по функциям в справке содержится еще много чего. Например, можно узнать побольше о какой-нибудь возникшей ошибке. Для этого в списке ошибок выделяем интересующую:

И нажимаем F1. В появившемся окне можно получить информацию не только о природе ошибки, но и подробно, с примерами, узнать причины ее возникновения, а также способы устранения. Кстати если у вас русская студия, то информацию по ошибкам вы получите на родном языке. Эту часть они уже успели перевести.

Порадовал я вас немного рисунками, пора возвращаться к основной теме.
Ну вот вы и научились создавать и использовать функции. Теперь сделаю небольшое дополнение. Функции объявлять не обязательно. Вместо объявления функции можно сразу написать ее реализацию. Вот приводимый ранее пример без объявления.

Code

#include <iostream>
using namespace std;

int sum(int a, int b)    //определение(реализация) функции вместо ее обьявления.
{
  return a + b;
}

void main()
{
  setlocale(0,"");

. . .
  cin.get();
  cin.get();
}

Возникает вопрос, зачем же тогда оно нужно. Это вы сможете понять со следующего урока.

Прикрепления: 5183675.png (10.8 Kb) · 8599656.png (75.7 Kb) · 6298078.png (20.9 Kb)


Windmill 2

WindMill 2D Game Engine
Поиск:

Все права сохранены. GcUp.ru © 2008-2025 Рейтинг