Глава 2
15:44 01.04.05
Все не мог воспользоваться перечислением в моих программах
но вот нашел пример использования перечисления enum в программе из
Либерти урок 13
В начале программы объявляется перечисление:
#include
enum {
Затем определяется функция Compare(),которая возвращает один из этих
элементов перечисления в результате своей работы.
//Функция Compare() используется ,чтобы определить
int Data::Compare(const Data & theOtherData)
{
int result = myData->Compare(*theData);
Объект myData сравнивает свою величину с величиной объекта, адрес которого
switch(result)
{
// по соглашению если он такой же как я то идет первым
case kIsSame: //придется пропустить новые данные
case kIsSmaller:
----------------------------------------------------------
21:40 01.04.2005
Нашел причину глюка в своей программе Romb30_01
Если эта функция не находит нужного слова для вывода на экран.
9:21 02.04.2005
Наконец то дописал программу,которая составляет 30 -словный кроссворд
В директории StructClass/Готовый Продукт
Ранее были написаны программы 24-словного кроссворда
---------------------------------------------------------------
22:14 02.04.2005
Ни как не хочет работать у меня кириллица
Все время компилятор сообщает об ошибке.Как быть?
8:03 03.04.2005
Ну вот и решена вчерашняя проблема!
Создание нового проекта:
File->New
После щелчка запускается мастер приложений Application Wizard,
После щелчка появится New Project Information со спецификациями проекта
Далее перед вами откроется рабочее окно.(из трех окон)
Далее можете свернуть пока рабочее окно компилятора и посмотреть,
Разверните обратно окно компилятора.Первое что мы видим, это то что
Добавление к проекту файлов с исходным кодом
Добавление существующего файла
Если файлы у нас уже набраны в каком -либо редакторе(например файл first.cpp
-вернитесь к списку First files в окне Project Workspace вашего проекта и щелкните правой
Добавление нового файла
. . .
Многофайловые проекты
Надо просто много раз поворить процедуру создания -добавления исходных файлов
Компиляция,компоновка и выполнение проекта стр 218
-------------------------------------------------------------------------------------
9:35 03.04.2005
Итак оба проекта работают!!
Теперь можно подключать в свои программы заголовочный файл
#include"CyrIOS.h" и программы должны работать
Проверь это!
Пора использовать это новое качество-работа с кириллицей- в более интересной
9:52 05.04.05
Начал новый проект "Русский Кроссворд" смотри одноименную директорию.
Интересно что модуль 3 можно использовать для подсчета слов в
8:43 06.04.2005
И так сегодня у меня есть программы с помощью которых я создаю
В обыкновенном массиве(обычный текст) программа работает нормально
В обыкновенном массиве(обычный текст) программа работает нормально
------------------------------------------------------------
Программа состоит из двух модулей:
Следует применить теперь сортировку по алфавиту
Директория Тексты -тексты,взятые из интернета, из которых черпается
www.public-library.narod.ru
Отсортированнные слова находятся в директории База01
---------------------------------------------------------
Снова как в тупике при вопросе о чтении из текстового файла
И так объявляем указатель *curword2 на тип string,затем
string *curword2;
Получается что у нас здесь в динамической памяти поместится
--------------------------------------------------------
char a[100] = "Never trouble trouble";
Для использования этих функций к программе следует подключить заголовочный
Функция strcpy(p,a) копирует все символы строки,указанной вторым параметром
Функция strncpy(p,a,n) выполняет то же самое но не более n символов,
Обе эти функции возвращают указатель на результирующую строку.Если
Программист должен сам заботиться о том, чтобы в строке-приемнике
//MyCopy.cpp
#include <fstream.h>
int main( int argc,char* argv[])
{
ifstream from1("text1");//открываем файл для считывания
if(!from1)
{
while (!from1.eof()) //пока не достигнут конец файла
{
return 0;
На основе вышеприведенного примера напрашивается сделать так,чтобы
char buf[100];
while (!from1.eof()) //пока не достигнут конец файла
{
Что тут получилось?Полный кавардак в голове!
Или объявить двумерный массив типа char
char buf[1024];
char z[80][20];
Что получится из этого кода?
В связи с этим материалом и функцией getline() повтори о посмотри
Преобразуй те файлы,которые там написаны,но преобразуй их
Затем остается объявить двумерный символьный массив в динамической
18:58 11.04.2005
Произведем исследовательскую работу в каталоге Школа\"Рабочий"
Пришлось вернуться к языку С и пособию С за 21 день.
20:44 14.04.2005
Наконец нашел программку с использованием двумерного
Программа 14.12 puts.c
/* Demonstrates puts(). */
#include <stdio.h>
/* Declare and initialize an array of pointers. */
char *messages[5] = {
int main( void )
{
for (x=0; x<5; x++)
puts("And this is the end!");
return 0;
Назад |
Начало урока |
Вверх |
Вперед
using namespace std;
В качестве параметра передается ссылка на объект типа Data:
//относительное положение объекта в списке
return kIsSmaller;
if (myValue > theOtherData.myValue)
return kIsLarger;
else
return kIsSame;
Далее в программе объект myData будет вызывать эту функцию
и ее возвращаемое значение будет присвоено переменной result.
В качестве аргумента передается указатель.
Затем используется переключатель switch который обрабатывает
значение этой переменной.В зависимости от значения этой переменной
программа может пойти по тому или другому руслу благодаря переключателю
switch :
мы передаем в качестве аргумента функции Compare().Возвращаемое значение
функции присваивается переменной result
case kIsLarger: // впереди себя
{
return dataNode;
//он больше меня,поэтому пошел он к следующему
//блоку и пусть ОН его обработает
myNext = myNext->Insert(theData);
return this;
return this; // успокоить MSC
}
Из вышеприведенного примера видно,что при помощи перечисления функция может
возвратить не просто одно значение,а одно значение из нескольких.
Например одно значение из 10 или даже одно из 100.
А затем при помощи опять же переключателя switch можем направить
работу программы по одному из 100 вариантов или русел в зависимости от того
какое значение вернула функция.
Глюк находится в функции fn2()
Его просто нет в массиве.
А команда вывода все равно остается же в этой функции,хотя
слово и не найдено.Вот тут то и сообщение идет во время исполнения
программы .Так называемый Run Time Error Ошибка во время исполнения
програмы.
Не знаю как с этим бороться.
Надо чтобы данные были,там где они должны быть.
Romb30_01
Romb24_01 Romb24_02 и 18-словного кроссворда Romb18_01
в этой же директории
Проекты Task4_1a и Task4_1b
Из учебника Павловской стр 153
Без кириллицы нельзя же ведь в программах.
Не умею открывать несколько проектов в MSVC
Использовал компилятор MSVC версия 6.
Кириллица работает!
Действия были такими:
---------------------------------------------------------------
В открывшемся диалоговом окне выбрать вкладку Projects
- выберите тип Win32 Console Application;
-введите имя проекта в текстовом поле Project Name ,например First;
-введите имя каталога размещения файлов проекта (в текстовом поле
Location)Здесь чтобы программа компилировалась правильно мне надо
набирать такой путь C:\Program Files\Microsoft Visual Studio
-щелкните левой кнопкой мыши OK
который открывает диалоговое окно предлагая определиться какой
подтип консольного приложения вам требуется создать.
-выберите тип An empty project;
-щелкните на кнопке Finish
и информацией о каталоге,в котором будет размещен создаваемый проект.
-щелкните на кнопке OK
что в той директории, в какой мы указали образовалась новая папка
по имени First .Загляните в нее и вы увидите несколько файлов
и папку Debug. О назначении файлов можете прочитать на стр 215
Приложения 1 Павловской
окно Project Workspace оживилось,в нем появились две вкладки -
Class View и File View. В структурных приложениях нет классов, поэтому
с первой вкладкой пока работать не будем, перейдем на вкладку File View.
Она предназначена для просмотра списка файлов проекта. Откроем список
First Files, щелкнув по значку +. Мы увидим Source Files, Header Files
Resourse Files. Так как в консольных приложениях файлы ресурсов не используются,
то про последнюю папку сразу забудем. Если заглянем в две другие папки,
то мы увидим что они пусты. Это потому, что мы выбрали пустой проект -An empty
project.
и файл first.h) То надо делать следующее:
-скопируйте ваши файлы в папку рабочей области проекта (в данном случае это папка First
ее адрес C:\Program Files\Microsoft Visual Studio\First ) Эту операцию вы сделаете в
Windows Commander
кнопкой мыши на папке Sourse Files
-в появившемся контекстном меню щелчком мыши выберите команду добавления файлов
Add Files to Folder...
-в открывшемся диалоговом окне Insert Files выберите нужный файл(first.cpp)
и щелкните OK.
описанную выше.В многофайловых проектах обычно присутствуют и заголовочные файлы
- они создаются-добавляются после щелчка правой кнопкой мыши на пиктограмме папки
Header Files в окне Project Workspace;при этом на вкладке Files диалогового окна New
выбирается тип файла C/C++Header File,а при вводе имени файла используется
расширение .h .
Проекты Task4_1a и Task4_1b
Из учебника Павловской стр 153
смотри файлы D:\языкСи\кросв01\кириллица\Task4_1a,Task4_1b
Но надо еще подключать файл
#include"CyrIOS.cpp"
Проверил .Работает
смотри файл D:\языкСи\кросв01\кириллица\рабочий
программе.
Но сначала надо создать исходные файлы русских слов 5,7,9-буквенных
Чтобы создать массив русских слов для кроссворда,воспользуемся замечательной
программой LovitZZbukv02 только в ней подправим одну строку
goodChar="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
здесь должен быть русский алфавит!
Интересно что в программе LoviSlov02 в модуле LovitZZbukv02
есть строка if(-1==goodChar.find(curword[i]))
Здесь goodChar - объект типа string вызывает функцию find(curword[i])
с аргументом. В качестве аргумента здесь в функции стоит одиночный
символ и функция ищет есть ли такой символ в объекте goodChar.Если есть,
то возвращает true в противном случае false.А можно ли в качестве
аргумента этой функции поставить не одиночный символ,а допустим
какое-нибудь слово или сочетание символов.Было бы интересно,
если бы функция искала слово или сочетание символов в проверяемой
строке.Это можно было бы использовать в проверяемой работе.
отсортированном по длине массиве слов.Проверь это!
массив русских слов для кроссворда :
-----------------------------------------------------------------
Программа LovitSlov01
Эта программа вылавливает из текстового файла слова указанной
длины и выводит их в новый файл без повторов
Все буквы в словах в нижнем регистре
Эта программа может глючить если массив в исходном файле был
взаранее отсортирован по длине.Для такого массива есть программа
LovitSlov05 (причина глюка не была установлена)
---------------------------------------------------------------
Программа LovitSlov02
Эта программа вылавливает из текстового файла слова указанной
длины и выводит их в новый файл без повторов
Буквы в словах как в нижнем так и в верхнем регистре
Эта программа может глючить если массив в исходном файле был
взаранее отсортирован по длине.Для такого массива есть программа
LovitSlov05 (причина глюка не была установлена)
Программа LovitSlov05
Эта умница программа.
Из входного файла infile1.txt убрала все
повторяющиеся слова
первый модуль сосчитал количество строк в файле infile1.txt,
а в данном случае это совпало с количеством слов.
Во втором модуле программа убрала из файла infile1.txt
все повторяющиеся слова и поместила новый массив
в файл outfile3.txt
Эта программа может использоваться только если в каждой строчке по
одному слову и массив слов отсортирован по длине
Можно ее переделать так чтобы в каждой строчке было по 4 слова
или по 8 слов ,тогда она тоже будет правильно считать количество слов
в файле а дальше уже тоже убирать повторы.
------------------------------------------------------------
Сортировку по алфавиту применяю при помощи программ
Инициал01 и АльфаСорт01 , АльфаСорт02
Первая программа Инициал01 является вспомогательной для программ
сортировки АльфаСорт01 и АльфаСорт02 .
В програме Инициал01 массив слов одевается в кавычки -это необходимо
для правильной работы программ сортировки,которые написаны так, что
массив слов при исполнении будет помещаться в стек.
база русских слов адрес из интернета текстов:
www.intirum.ru -периодические издания
www.rubricon.com -энциклопедии и словари
www.aonb.ru -областная библиотека
12:31 11.04.05
в динамиескую память. Надо вызубрить все способы наизусть
и в Си и в Си++.
оператор new присваивает указателю адрес в динамической
памяти (адрес начале массива) и в квадратных скобках количество
ячеек способных каждая вместить один объект типа string.
curword2 = new string[kolSlov];
целый массив объектов типа string.Так ли это?
Вот как инициализируется строка в куче по Павловской:
Для строк не определена операция присваивания,поскольку строка является
не основным типом данных, а массивом. Присваивание выполняется с помощью
функций стандартной библиотеки или посимвольно вручную
(что менее предпочтительно так как чревато ошибками). Например чтобы
присвоить строке p строку a, можно воспользоваться функциями strcpy()
и strncpy() :
char *p = new char [m];
strcpy(p,a);
strncpy(p,a,strlen(a)+1);
файл
(a),включая завершающий 0 в строку,указанную первым параметром(p).
то есть числа символов ,указанного третьим параметром.Если нуль-символ
в исходной строке встретится раньше,копирование прекращается, а оставшиеся
до n символы строки p заполняются нуль-символвми.В противном случае
(если n меньше или равно длине строки a) завершающий нуль-символ в p
не добавляется.
области памяти, занимаемые строкой-назначением и строкой источником
перекрываются, поведение программы не определено.
Функция strlen(a) возвращает фактическую длину строки a, не включая
нуль-символ.
хватило места для строки-источника(в данном случае при выделении памяти
значение переменной m должно быть больше или равно 100), и о том,чтобы
строка всегда имела завершающий нуль-символ.
--------------------------------------------------------------------------
Выход за длину строки и отсутствие нуль-символа являются распространенными
причинами ошибок в программах обработки строк.
--------------------------------------------------------------------------
Еще по Павловской:
Следующая программа покажет вывод содержимого текстового файла на
экран.(Имя файла задается аргументом командной строки)
#include <iostream.h>
using namespace std;
char enterchar;
cout<
return (1);
char buf[1024];
cout<
char enterchar;
cout<
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
массив buf[] стал бы двумерным массивом.И при каждой итерации
цикла чтобы инкременировать массив второго более высокого чем
символы уровня. Массив второго уровня - это строки,массив первого
уровны-это символы. Тогда весь текстовый файл состоящий из строк и из
символов вместится в этот двумерный массив строк.
char *p = new char [m];
cout<
p++;
cout<<*p<
char enterchar;
cout<
//char *p = z;
int i=0;
while (!from1.eof()) //пока не достигнут конец файла
{
cout<
cout<
char enterchar;
cout<
материал из школа\символьные массивы\kross1_04 и тд.
Здесь показано как инициализировать двумерный символьный массив
при помощи функции getline() и как потом обратиться к каждому
слову из этого массива а так же к каждому символу внутри слова.
так чтобы инициализировались двумерные символьные массивы
при помощи этой же функции но уже из текстового файла!
памяти и инициализировать его из текстового файла при помощи
этой же функции getline()
День 16 работа с файлами.Листинг 16.1
символьного массива Язык С из книги Освой сам С за 21 день
Использование функции puts() для отображения строк
puts(messages[x]);
В этой программе объявляется массив указателей на строки.
До сих пор вы еще не работали с такими объектами
С помощью таких двумерных массивов и этой функции можно выводить на экран
слова подходящие для моих кроссвордов. При помощи этой функции можно
вывести и отдельные символы из подобного двумерного массива.
Надо попробовать и можно передалать несколько программ из ранее
написанных для С++.
Содержание