- •2.2.Функции, возвращающие значение
- •Void main ()
- •Void Sum(float *s,float *X, int n)
- •Void main ()
- •Void Sumstmatr ( float (*mz)[m], float *mx, int n1, int m1); //прототип функции Sumstmatr
- •Void main ()
- •Void Sumstmatr (float (*mz)[m], float *mx, int n1, int m1)
- •Void main ()
- •Void main()
- •2.3. Функции обработки строк
- •Void strcpy ( char *s, char *t)
- •Void strcpy ( char *s, char *t)
- •Int strcmp ( char * s, char * t)
- •Unsigned strlen (const char *str );
- •Void strcpy (char *s,char *t);
- •Void main ()
- •Int Vs(char *s, char *sl, int d);
- •Int Vs(char *s,char *sl, int d) // функция формирования очередной строки
- •2.4. Рекурсивные функции
- •Void main()
- •3.Классы памяти и области действия описаний
- •Автоматические переменные
- •Внешние переменные
- •Void main ()
- •Void main ()
- •Int a[4]; // указано, что а – локальный массив целого типа
- •Void main ()
- •Статические переменные
- •Void f();
- •Void main ()
- •Void f()
- •Регистровые переменные
- •4.Элементы структурного программирования
- •4.1.Нисходящая разработка
- •4.2.Основные структуры, пошаговая детализация
- •Void main ()
- •Void main ()
- •Void Smog (long mz[][n2]);
- •Void main ()
- •Void Smog (long mz[][n2])
- •4.3.Сквозной структурный контроль
- •Элементы, которые должны проверяться на контрольных сессиях
Регистровые переменные
Регистровые переменные запоминаются в регистрах центрального процессора. Доступ к ним и работа с ними выполняется гораздо быстрее, чем в оперативной памяти. В остальном, регистровые переменные аналогичны автоматическим переменным. Объявляются они служебным словом register:
register int x; Следует иметь в виду, что описание переменной как регистровой является скорее просьбой, чем обязательно выполнимой командой. Компилятор сравнивает наше требование с количеством свободных регистров. Если есть возможность удовлетворить требование, то переменная размещается в регистре, в противном случае переменная становится простой автоматической переменной.
В заключение обсудим, какой же класс памяти лучше всего применять? Ответ на вопрос почти всегда один: «автоматический». Задумайтесь, почему этот класс памяти выбран по умолчанию? На первый взгляд использование внешних переменных соблазнительно. Опишем все переменные как внешние, и у нас не будет забот с передачей параметров между функциями в прямом и обратном направлении! Все данные предоставлены в общее пользование – вроде бы это справедливо и очень удобно! Но при этом возникают проблемы, когда одна функция изменяет данные в другой, что не входит в ее планы. Неоспоримый многолетний совокупный опыт программистов свидетельствует о том, что такие проблемы значительно перевешивают кажущуюся привлекательность широкого использования внешних переменных.
Одно из золотых правил программирования заключается в соблюдении принципа «необходимо знать только то, что нужно». Поэтому организуйте работу каждой функции автономно, насколько это возможно, и используйте глобальные переменные только тогда, когда это необходимо. Иногда полезны и другие классы памяти. Но прежде, чем их использовать, убедитесь, насколько это необходимо.
4.Элементы структурного программирования
Программирование можно определить как процесс проектирования, кодирования и тестирования программы. Добавляя слово «структурное» можно сказать, что структурное программирование – это процесс проектирования, кодирования и тестирования программы в соответствии с заранее определенной дисциплиной. В структурном программировании важнаформа и дисциплина. Раньше хорошими программистами считали тех, кто писал весьма хитроумные программы, которые занимали минимум оперативной памяти и выполнялись за кратчайшее время. Это было естественно, потому что в «старое доброе время» размер оперативной памяти был ограничен, а машины намного медленнее, чем сегодня. Результатом хитроумного кодирования оказывались программы, которых совершенно было невозможно понять другим лицам. Программисты зачастую сами признавали, что свою собственную программу они с трудом понимают уже через полгода, а то и через месяц. Фактически каждая написанная программа впоследствии модифицируется при изменении внешних требований или ликвидации ошибок. Изменения, вносимые в запутанную программу, еще больше усложняют ее понимание.
Можно выделить две главные цели структурного программирования:
избавиться от плохой структуры программы,
создать программы, которые можно было понимать, сопровождать и модифицировать без участия авторов.
Стоимость сопровождения и модификации программ обычно в несколько раз больше, чем стоимость их создания. Сделать программу более понятной, легкой для отладки и сопровождения – это значит увеличить эффективность процесса обработки данных.
Методология структурного программирования зародилась в семидесятые годы прошлого века. Один из основоположников структурного программирования – профессор Э. В. Дейкстра считал, что семидесятые годы завершатся тем, что “мы окажемся способны проектировать и реализовывать такие системы, которые в настоящее время требуют напряжения всех наших способностей … и, кроме того, эти системы будут фактически свободны от ошибок”. И действительно, на наших глазах произошли коренные изменения в методах программирования, была разработана методология объектно–ориентированного программирования, появились мощные системы автоматизированного проектирования программ, изменилась технология программирования, но утверждать сейчас, через 30 лет, что создаваемые системы свободны от ошибок, мы, к сожалению, не можем! Не зря ведь появилась молитва программиста “Господи! Перезагрузи этот Мир!”. Многие читатели наверняка уже имеют определенный опыт общения с современными компьютерами. Вспомните, как часто приходилось вам использовать три клавиши: “Ctrl-Alt-Del”, вызывающие перезагрузку самых современных систем, при работе которых произошло “зависание” компьютера. На наш взгляд, в человеко-машинных системах (а именно таковыми являются все системы программирования) всегда существует вероятность возникновения ошибки. Наша же задача сделать так, чтобы вероятность возникновения ошибки была как можно меньше, а исправить ошибку было как можно проще. Современные компьютерные технологии хорошо справляются с рутинной работой, но не способны к творческому мышлению. Эту часть работы (пока ?) может сделать только человек. А вот методология структурного программирования способствует “правильному” развитию такого мышления при разработке программ. Поэтому сейчас мы познакомимся с методологией“нисходящего структурного программирования”,состоящей из трех частей:
Нисходящая разработка,
Типовые (основные) структуры, пошаговая детализация,
Сквозной структурный контроль.