PSPверсия |  Новое на сайте |  Обратная связь |  Команда сайта |  FAQ |  ПРАВИЛА |     
 

Популярные статьи

Обзор нового на PSPinfo.RU

ДатаГородНомерНазваниеЗаписаться
собери друзей и сообщи об этом всем! »»
НовостиТемыСейвыОбоиВидеоролики
1..:Dr.Who:.945
2.iliya23420
3.Константин414
4.(:389
5.Masserau377
1.Dankin333
2.Игорь330
3.kalash1322
4.DJAMrik271
5.Артем=)252
1..:Dr.Who:.347
2.legofan12130
3.-=Sephiroth=-117
4.Dan96106
5.Patric Star104
1.wushu12250
2.Metal Sonic7404
3.iliya237000
4.Теккен6652
5.LFY6309
1..:Dr.Who:.4548
2.Михаил3742
3..:Canon:.1920
4.Ivan1760
5.Гомер Симпсон1535

Уроки программирования.Урок 2
[03.12.08] Автор: .:Witcher:. HomeBrew » Программы
урок 1

На прошлом уроке я расказал как установить программу,и мы расмотрели простенький пример... Программы на PSP пишутся на многих языках,но основной конечно является Си. Им можно написать не только программу,а даже полноценную игру!!! Но, тут есть одна проблемка) программирование на псп чуток отличается от программирование на pc.Из-за этого я так сказать 'принял' решение научить вас поначалу работать на пс,так как это легче и медленно перейти на псп)) Сегодня я раскажу вам теорию)) Вам потребуется скачать Visual c++, конечно есть и другие варианты, но это,самая удобная программа(на мой взгляд) Ну я думаю можно приступать) Программы обычно пишутся для того, чтобы решить какую-то конкретную задачу. Например, книжный магазин ведет запись проданных книг. Регистрируется название книги и издательство, причем запись идет в том порядке, в каком книги продаются. Каждые две недели владелец магазина вручную подсчитывает количество проданных книг с одинаковым названием и количество проданных книг от каждого издателя. Этот
список сортируется по издателям и используется для составления последующего заказа книг. Добустим нас попросили написать программу для автоматизации этой деятельности.
Один из методов решения большой задачи состоит в разбиении ее на ряд задач поменьше. В идеале, с маленькими задачами легче справиться, а вместе они помогают одолеть большую. Если подзадачи все еще слишком сложны, мы, в свою очередь, разобьем их на еще меньшие, пока каждая из подзадач не будет решена. Такую стратегию называют пошаговой детализацией или принципом “разделяй и властвуй”. Задача книжного магазина делится на четыре подзадачи:

Прочитать файл с записями о продажах.
Подсчитать количество продаж по названиям и по издателям.
Отсортировать записи по издателям.

Вывести результаты.

Решения для подзадач 1, 2 и 4 известны, их не нужно делить на более мелкие подзадачи.
А вот третья подзадача все еще слишком сложна. Будем дробить ее дальше.

3a. Отсортировать записи по издателям.
3b. Для каждого издателя отсортировать записи по названиям.
3c. Сравнить соседние записи в группе каждого издателя. Для каждой одинаковой пары увеличить счетчик для первой записи и удалить вторую.


Эти подзадачи решаются легко. Теперь мы знаем, как решить исходную, большую задачу. Более того, мы видим, что первоначальный список подзадач был не совсем правильным.
Правильная последовательность действий такова:
Прочитать файл с записями о продажах.
Отсортировать этот файл: сначала по издателям, внутри каждого издателя – по
названиям.
Удалить повторяющиеся названия, наращивая счетчик.
Вывести результат в новый файл.

Результирующая последовательность действий называется алгоритмом. Следующий шаг – перевести наш алгоритм на некоторый язык программирования, в нашем случае – на С++.

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


Первая из приведенных инструкций является инструкцией объявления. book_count можно назвать идентификатором, символической переменной (или просто переменной) или объектом. Переменной соответствует область в памяти компьютера, соотнесенная с определенным именем (в данном случае book_count), в которой хранится значение типа (в нашем случае целого). 0 – это константа. Переменная book_count инициализирована
значением 0.
Вторая инструкция – присваивание. Она помещает в область памяти, отведенную переменной book_count, результат сложения двух других переменных – books_on_shelf и books_on_order. Предполагается, что эти две целочисленные переменные определены где-то ранее в программе и им присвоены некоторые значения.

Третья инструкция является инструкцией вывода. cout – это выходной поток, направленный на терминал, << – оператор вывода. Эта инструкция выводит в cout – то есть на терминал – сначала символьную константу, заключенную в двойные кавычки ("значение переменной book_count: "), затем значение, содержащееся в области памяти, отведенном под переменную book_count. В результате выполнения данной инструкции
мы получим на терминале сообщение:
значение переменной book_count: 11273

если значение book_count равно 11273 в данной точке выполнения программы.
Инструкции часто объединяются в именованные группы, называемые функциями. Так, группа инструкций, необходимых для чтения исходного файла, объединена в функцию readIn(). Аналогичным образом инструкции для выполнения оставшихся подзадач сгруппированы в функции sort(), compact() и print().
В каждой С++ программе должна быть ровно одна функция с именем main(). Вот как может выглядеть эта функция для нашего алгоритма:





Исполнение программы начинается с выполнения первой инструкции функции main(), в нашем случае – вызовом функции readIn(). Затем одна за другой исполняются все дальнейшие инструкции, и, выполнив последнюю инструкцию функции main(), программа заканчивает работу.
Функция состоит их четырех частей: типа возвращаемого значения, имени, списка параметров и тела функции. Первые три части составляют прототип функции.
Список параметров заключается в круглые скобки и может содержать ноль или более параметров, разделенных запятыми. Тело функции содержит последовательность исполняемых инструкций и ограничено фигурными скобками.
В нашем примере тело функции main() содержит вызовы функций readIn(), sort(), compact() и print(). Последней выполняется инструкция
Инструкция return обеспечивает механизм завершения работы функции. Если оператор return сопровождается некоторым значением (в данном примере 0), это значение становится возвращаемым значением функции. В нашем примере возвращаемое значение 0 говорит об успешном выполнении функции main(). (Стандарт С++ предусматривает, что функция main() возвращает 0 по умолчанию, если оператор return не использован
явно.)

Давайте закончим нашу программу, чтобы ее можно было откомпилировать и выполнить. Во-первых, мы должны определить функции readIn(), sort(), compact() и print().


Для начала вполне подойдут заглушки:



Тип void используется, чтобы обозначить функцию, которая не возвращает никакого значения. Наши заглушки не производят никаких полезных действий, они только выводят на терминал сообщения о том, что были вызваны. Впоследствии мы заменим их на реальные функции, выполняющие нужную нам работу.
Пошаговый метод написания программ позволяет справляться с неизбежными ошибками.
Попытаться заставить работать сразу всю программу – слишком сложное занятие.
Имя файла с текстом программы, или исходного файла, как правило, состоит из двух частей: собственно имени (например, bookstore) и расширения, записываемого после точки. Расширение, в соответствии с принятыми соглашениями, служит для определения назначения файла. Файл bookstore.h является заголовочным файлом для С или С++ программы. (Необходимо отметить, что стандартные заголовочные файлы С++ являются
исключением из правила: у них нет расширения.)
Файл bookstore.c является исходным файлом для нашей С программы. В операционной системе UNIX, где строчные и прописные буквы в именах файлов различаются, расширение .C обозначает исходный текст С++ программы, и в файле bookstore.C располагается исходный текст С++.
В других операционных системах, в частности в DOS, где строчные и прописные буквы не различаются, разные реализации могут использовать разные соглашения для обозначения исходных файлов С++. Чаще всего употребляются расширения .cpp и .cxx: bookstore.cpp, bookstore.cxx.
Заголовочные файлы С++ программ также могут иметь разные расширения в разных реализациях (и это одна из причин того, что стандартные заголовочные файлы С++ не имеют расширения). Расширения, используемые в конкретной реализации компилятора С++, указаны в поставляемой вместе с ним документации.
Итак, создадим текст законченной С++ программы (используя любой текстовый редактор):


Здесь iostream – стандартный заголовочный файл библиотеки ввода/вывода (обратите внимание: у него нет расширения). Эта библиотека содержит информацию о потоке cout, используемом в нашей программе. #include является директивой препроцессора, заставляющей включить в нашу программу текст из заголовочного файла iostream. Непосредственно за директивой препроцессора следует инструкция


Эта инструкция называется директивой using. Имена, используемые в стандартной библиотеке С++ (такие, как cout), объявлены в пространстве имен std и невидимы в нашей программе до тех пор, пока мы явно не сделаем их видимыми, для чего и применяется данная директива.
После того как исходный текст программы помещен в файл, скажем prog1.C, мы должны откомпилировать его. В UNIX для этого выполняется следующая команда:
$ CC prog1.C

Здесь $ представляет собой приглашение командной строки. CC – команда вызова компилятора С++, принятая в большинстве UNIX-систем. Команды вызова компилятора могут быть разными в разных системах.
Одной из задач, выполняемых компилятором в процессе обработки исходного файла, является проверка правильности программы. Компилятор не может обнаружить смысловые ошибки, однако он может найти формальные ошибки в тексте программы.
Существует два типа формальных ошибок:
синтаксические ошибки. Программист может допустить “грамматические”, с точки зрения языка С++, ошибки. Например:



ошибки типизации. С каждой переменной и константой в С++ сопоставлен некоторый тип. Например, число 10 – целого типа. Строка "hello", заключенная в двойные кавычки, имеет символьный тип. Если функция ожидает получить в качестве параметра целое значение, а получает символьную строку, компилятор рассматривает это как ошибку типизации.
Сообщение об ошибке содержит номер строки и краткое описание. Полезно просматривать список ошибок, начиная с первой, потому что одна-единственная ошибка может вызвать цепную реакцию, появление “наведенных” ошибок. Исправление этой динственной ошибки приведет и к исчезновению остальных. После исправления синтаксических ошибок программу нужно перекомпилировать.
После проверки на правильность компилятор переводит исходный текст в объектный код, который может быть понят и исполнен компьютером. Эту фазу работы компилятора называют генерацией кода.
В результате успешной компиляции образуется выполняемый файл. Если запустить выполняемый файл, полученный в результате компиляции нашей программы, на терминале появится следующий текст:


В С++ набор основных типов данных – это целый и вещественный числовые типы, символьный тип и логический, или булевский. Каждый тип обозначается своим ключевым словом. Любой объект программы ассоциируется с некоторым типом.Например:

Здесь определены четыре объекта: age, price, delimiter, found, имеющие соответственно типы целый, вещественный с двойной точностью, символьный и логический. Каждый объект инициализирован константой – целым числом 10, вещественным числом 19.99, символом пробела и логическим значением false.
Между основными типами данных может осуществляться неявное преобразование типов. Если переменной age, имеющей тип int, присвоить константу типа double, например:
age = 33.333;

то значением переменной age станет целое число 33.
Стандартная библиотека С++ расширяет базовый набор типов, добавляя к ним такие типы, как строка, комплексное число, вектор, список. Примеры:

Здесь current_chapter – объект типа string, инициализированный константой "Начинаем". Переменная chapter_titles – вектор из 20 элементов строкового типа.
Несколько необычный синтаксис выражения

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

Никакой язык, никакие стандартные библиотеки не способны обеспечить нас всеми типами данных, которые могут потребоваться. Взамен современные языки программирования предоставляют механизм создания новых типов данных. В С++ для этого служит механизм классов. Все расширенные типы данных из стандартной библиотеки С++, такие как строка, комплексное число, вектор, список, являются
классами, написанными на С++. Классами являются и объекты из библиотеки ввода/вывода.
Механизм классов – одна из самых главных особенностей языка С++.

Порядок выполнения инструкций
По умолчанию инструкции программы выполняются одна за другой, последовательно. В программе первой будет выполнена инструкция readIn(), за ней sort(), compact() и наконец print().

Однако представим себе ситуацию, когда количество продаж невелико: оно равно 1 или даже 0. Вряд ли стоит вызывать функции sort() и compact() для такого случая. Но вывести результат все-таки нужно, поэтому функцию print() следует вызывать в любом случае. Для этого случая мы можем использовать условную инструкцию if. Нам придется переписать функцию readIn() так, чтобы она возвращала количество прочитанных записей:



Первая инструкция if обеспечивает условное выполнение блока программы: функции sort() и compact() вызываются только в том случае, если count больше 1. Согласно второй инструкции if на терминал выводится сообщение “Продаж не было”, если условие истинно, т.е. значение count равно 0. Если же это условие ложно, производится вызов функции print().
Другим распространенным способом непоследовательного выполнения программы является итерация, или инструкция цикла. Такая инструкция предписывает повторять блок программы до тех пор, пока некоторое условие не изменится с true на false.Например:

В этом надуманном примере цикл while выполняется пять раз, до тех пор пока
переменная iterations не получит значение 5 и переменная continue_loop не станет
равной false. Инструкция
iterations++;

увеличивает значение переменной iterations на единицу.
Не знаю как вы,а я устал)) так что продолжим на следущем уроке)
А теперь вопрос-стоит ли писать дальше??

  • 68

Просмотров: 8727 Благодарностей: 50
Напечатать Комментарии (16)
»» Сообщить об ошибке «« [?]
Похожее по теме "Уроки программирования.Урок 2":
  • Уроки программирования. Урок четвёртый!
  • Уроки программирования. Урок первый!
  • Редактор Баз Данных CWСheat
  • ISO Tool v1.971 OFW
  • Burnout Legend
    • PSPinfo
    • ВКонтакте
    • Facebook
    • Twitter
    • Справка
    #1 [03.12.08] .:Witcher:.

    Посетители
    .:Witcher:.
    много заказов.. Работаю

    Публикаций: 13
    Комментариев: 55
    Спасибо: 744/6
    Репутация: 15
    Тут: 15 лет 8 месяцев
    удачи в осиление букофф

    #2 [03.12.08] stick86

    Посетители
    stick86
    --

    Публикаций: 0
    Комментариев: 32
    Спасибо: 0/14
    Репутация: 0
    Тут: 15 лет 8 месяцев
    Молодец! Вряд ли заинтересует многих, но за сторание скажу "Спасибо"! ))

    PS Выложи еще разок проги из 1-го урока!

    #3 [03.12.08] Алексей

    Посетители
    Алексей
    --

    Публикаций: 60
    Комментариев: 425
    Спасибо: 2357/671
    Репутация: 9
    Тут: 16 лет 1 месяц
    Спасибо но офрмленно не оч

    #4 [03.12.08] TWERQEN

    Посетители
    TWERQEN
    7:0 господа хороши!

    Публикаций: 4
    Комментариев: 266
    Спасибо: 129/156
    Репутация: 73
    Тут: 16 лет 3 месяцa
    хочу написать чтонибудь плохое но пока не прочитал так что ждите

    #5 [03.12.08] .:Witcher:.

    Посетители
    .:Witcher:.
    много заказов.. Работаю

    Публикаций: 13
    Комментариев: 55
    Спасибо: 744/6
    Репутация: 15
    Тут: 15 лет 8 месяцев
    TWERQEN,
    я сам напишу плохое:
    Написал плохо
    Оформлено плохо
    Для новичков не очень понятно
    а вобще спс)

    #6 [03.12.08] ForzaJuve

    Посетители
    ForzaJuve
    --

    Публикаций: 0
    Комментариев: 11
    Спасибо: 0/0
    Репутация: 0
    Тут: 16 лет 2 месяцa
    Огромное спасибо давно искал подробно про програмирование на псп!!!

    #7 [03.12.08] 3bl3gamer

    Посетители
    3bl3gamer
    --

    Публикаций: 0
    Комментариев: 116
    Спасибо: 0/462
    Репутация: 2
    Тут: 16 лет 4 месяцa
    ну НАКОНЕЦ-ТО!!!

    писать дальше не просто стоит, а ОБЯЗАТЕЛЬНО НАДО!!!
    хоть где-то будет вменяемое обьяснение на начанающих, так держать!

    #8 [04.12.08] mircd

    Посетители
    mircd
    --

    Публикаций: 0
    Комментариев: 2
    Спасибо: 0/2
    Репутация: 0
    Тут: 16 лет
    спасибо, продолжай в том же духе,только не затягивай

    #9 [04.12.08] no swear

    Посетители
    no swear
    xmmm

    Публикаций: 0
    Комментариев: 247
    Спасибо: 0/269
    Репутация: 15
    Тут: 15 лет 6 месяцев
    я думаю что 3 урок стоит писать

    #10 [05.12.08] Loco Roco

    Посетители
    Loco Roco
    --

    Публикаций: 0
    Комментариев: 18
    Спасибо: 0/0
    Репутация: 0
    Тут: 16 лет 4 месяцa
    Выложи пожалуйста эту же статью в вордовском например файле через файлообменник. Сайт портит оформление, читать внятно нереально.
    За уроки большое спасибо!

    #11 [05.12.08] TWERQEN

    Посетители
    TWERQEN
    7:0 господа хороши!

    Публикаций: 4
    Комментариев: 266
    Спасибо: 129/156
    Репутация: 73
    Тут: 16 лет 3 месяцa
    простите но это отстой все кто говорят что нужен 3 урок считают что буквально за пару занятий смогут овладеть языком ...
    нет мои дорогие! и не дорогие! и кому я безразличен!
    освоение языка С требует ежедневных занятий с разборами библиотек и кодов программ
    а так это просто флудилка для нубов и создание ламеров
    опомнитесь !
    на сайте контингент людей слишком мал по возврасту
    и для них объяснять С как принципы Ассемблера для умалешённого
    не спорю что среди ума лишёных может и найдёться парочка гениев, как и среди вас, но стоит ли выкладывать стоитьи по прагроммированию на сайте где нету людей которые будут этим заниматься или занимаються этим проффисионально!
    и если на то уж пошло то можно было бы и lua для начала преподать для изучения простейших алгоритмов!

    смахивает на то что автор решил заработать халявную славу на пустой статье хоть и большой

    #12 [05.12.08] .:Witcher:.

    Посетители
    .:Witcher:.
    много заказов.. Работаю

    Публикаций: 13
    Комментариев: 55
    Спасибо: 744/6
    Репутация: 15
    Тут: 15 лет 8 месяцев
    TWERQEN,
    судя с твоих слов это просто зависть.И как ты заметил то я не начал с середины,а с того что такое алгоритм

    #13 [14.01.09] kuznecov95-95

    Посетители
    kuznecov95-95
    --

    Публикаций: 8
    Комментариев: 169
    Спасибо: 404/391
    Репутация: 8
    Тут: 15 лет 3 месяцa
    ух ты прикольно!!!

    #14 [04.03.09] Bero

    Посетители
    Bero
    --

    Публикаций: 0
    Комментариев: 2
    Спасибо: 0/1
    Репутация: 0
    Тут: 15 лет 5 месяцев
    многа букафФф...спасиб))мне пригодится, как раз для универа))

    #15 [24.04.09] Rakaddar

    Посетители
    Rakaddar
    --

    Публикаций: 0
    Комментариев: 3
    Спасибо: 0/5
    Репутация: 0
    Тут: 15 лет 10 месяцев
    тут такая тема : я сам С++ знаю в общих чертах (не заходя на сложные темы типа объектное программирование) и то что тут написано легко понял ибо знаю.
    Вопрос : а как это перенести на PSP?

    #16 [06.06.09] .:Witcher:.

    Посетители
    .:Witcher:.
    много заказов.. Работаю

    Публикаций: 13
    Комментариев: 55
    Спасибо: 744/6
    Репутация: 15
    Тут: 15 лет 8 месяцев
    писать ли дальше уроки?? Да или нет? Ответ не здесь Ответ в аську. Публикация уроков тут не будет. Ибо забанили один раз,а писать снова тут.. де гарантия что снова не забанят... Кароч аська 9287678

    Информация
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

    Сообщить о нарушениях в этих комментариях
    Для чтения материалов на нашем сайте не нужна регистрация.
    Но для написания комментариев она нужна.
    Но теперь, Вы можете оставить свой комментарии к материалам сайта без регистрации на PSPinfo.RU, а просто авторизовавшись в популярных сетях:
    - ВКонтакте
    - Facebook
    - Twitter
    Комментарии модерируются!
    В случае нарушения правил сайта Вы будете заБАНены.


    Обсуждение соцсетей тут.

    Личный кабинет

    E-Mail:

    Пароль (Забыли?):



    [Регистрация]

    МиниСтатистика

    На нашем сайте имеется:
    Обоев для PSP: 153001
    Сейвов для PSP: 7253
    Тем для PSP: 5095
    Роликов о PSP: 26507

    Обои для PSP

    штука
    Альбом: Игры
    Разместил: Striker

    Голосование

    Как Вы подключены к Интернет?




    Показать все опросы

    Купить/починить PSP

    » Место сдается...

    А тут ты был???

    » Покажи где ты уже был!
    » 
    » 


    Flash игры onLine |  Игры для PSP |  Обои для PSP |  Софт для PSP |  Темы для PSP |  Сейвы для PSP |  Комиксы для PSP |  Форум |  Карта сайта |   
    "" and "PlayStation" are registered trademarks of Sony Computer Entertainment Inc. "", PSP and "UMD" are trademarks of Sony Computer Entertainment Inc. "", "XMB", "Memory Stick Duo" and the "Memory Stick Duo" logotype are trademarks of Sony Corp. All product titles, publisher names, trademarks, artwork and associated imagery are trademarks, registered trademarks and/or copyright material of the respective owners. All rights reserved.
    Game's TOP-100 Counter