Г. Шилтд - Самоучитель C++ (PDF) (1114887), страница 83
Текст из файла (страница 83)
good ( ) ) return 1;C++ПриложениеВ.Ответынавопросыирешенияупражненийif (io.eof {) ) continue;io.seekg (i, ios: :beg) ;if ( !io.good() ) return 1;io.put (ch2) ;if { ! io. good () } return 1;io.put (chl) ;if ( lio.goodf) ) return 1;io. close () ;if ( ! io.good () ) return 1;return 0;Проверка усвоения материала главы 91. ^include <iostream>using namespace std;ostream Stabs(ostream &stream){stream « '\t' « '\t' « f\t';stream.width(20);return stream;int main ()cout « tabs « "ПроверкаХп";return 0;2.
^include <iostream>^include <cctype>using namespace std;istream Sfindalpha(istream sstream)char ch;do {stream.get(ch);} while{Jisalpha(ch));return stream;}_605Самоучитель C++606intmain{)char str[80];cin » findalpha » str;cout « str « "\n";return 0;!3. // Копирование файла и смена регистра букв^include <iostream>^include <fstream>^include <cctype>using namespace std;int main(int argc, char *argv[]){char ch;if(argc!=3) {cout « "Копирование <источник> <целевой_файл>\п";return 1;ifstream in{argv[l] ) ;if(!in> {cout « "Файл ввода открыть невозможно\п";return 1 ;}ofstream out (argv[2] ) ;if ( l o u t ) {cout « "Файл вывода открыть невозможно\п";return 1;while ( !in.
eof {)) {ch = in . get ( ) ;if (iin.eof () ) {if (islower {ch) ) ch = toupper(ch);else ch = tolower(ch);out. put (ch) ;in. close () ;out. close () ;Приложение^. Ответы на вопросы и решения упражненийreturn 0;4. // Подсчет буквttinclude <iostream>^include <fstream>^include <cctype>using namespace std;int alpha [26];int main (int argc, char *argv[]){char ch;if(argc!=2) {cout « "Подсчет: <имл_файла>\п";return 1;}ifstream in(argv[l]);if(!in) {cout « "Файл ввода открыть невозможноЧп";return 1;}// Инициализация массива alpha []int i ;for(i=0; i<26; i++) alpha [i] = 0;while ( ! in.eof {) ) {ch = in. get () ;if (isalpha (ch) ) { // если найдена буква, считаем ееch = toupper (ch) ;alpha[ch - 'A']++; // 'A' - 'A1 == 0,// 'B' - 'A' == 1, и т.
д.// Вывод на экран результатаfor (i-0; i<26; i++) {cout « (char) ('A' -(- i) « ": " « alpha [i] « '\n'in. close () ;return 0;607608_Самоучитель5а. // Копирование файла и смена регистра букв с контролем ошибок^include <iostrearn>^include <fstreara>linclude <cctype>using namespace std;int main(int argc, char *argv[]){char ch;if(argc!=3) {cout « "Копирование <откуда> <куда>\п";return 1;ifstream in {argv [1] ) ;if С ! in) {cout « "Файл ввода открыть невозможной";return 1;of stream out {argv [2] ) ;if (lout) {cout « " Файл вывода открыть невозможной"return 1;while ( lin.eof () ) (ch = in. get ( ) ;if ( ! in.
good (} && lin.eof ()) return 1if (lin.eof 0) {if (islower (ch) ) ch = toupper(ch)else ch = tolower(ch);out .put (ch) ;if ( lout. good ( ) ) return 1;in.close();out.close();if (!in.good{) S5 lout.good()) return 1return 0;5Ь.// Подсчет букв с контролем ошибокttinclude <iostream>^include <fstream>Приложение В. Ответы на вопросы и решения упражнений609^#include <cctype>,using namespace std;int alpha [26];int m a i n f i n t argc,char * a r g v [ ] )char ch;if(argc!=2) {cout « "Подсчет: <имя_файла>\п";return 1;1ifstream in(argv[l]);cout « "Файл ввода открыть невозможной";return 1;// Инициализация массива alpha[]'int i;for(i=0; i<26; i++) alpha[i] = 0;while(lin.eof()) {ch = in.get();if(!in.good() s& lin.eof ()) return 1;if(isalpha(ch)) { // если найдена буква, подсчитаем ееch = toupper(ch);alpha[ch - 'A']++; // 'A1 - 'A' == 0,// 'B' - 'A' == 1, и т.
д.};// Вывод на экран результатаfor(i=0; i<26; i-м-) {cout « (char) ('A' + i) « ": " « alpha[i] « '\n';1in. close () ;if(!in.good()) return 1;return 0;6. Для установки указателя чтения (get) используется функция seekg(). Для установки указателя записи (put) используется функция seekp().610Самоучитель C++Проверка усвоения материала в целом1. ^include <iostream>^include <fstream>^include <cstring>using namespace std;ftdefine SIZE 40class inventory {char item[SIZE]; // название предметаint onhand; // количество экземпляров, выданных на рукиdouble cost; // цена экземпляраpublic:inventory(char *i, int o, double c){strcpy(item, i);onhand = o;cost - c;}void store(fstream sstream);void retrieve(fstream &stream};friend ostream &operator« (ostream ustrearn, inventory ob);friend istream &operator» (istream fistream, inventory Sob);};ostream &operator« (ostream Sstream, inventory ob){stream « ob.item « ": " « ob.onhand;stream « " $" « ob.cost « '\n';return stream;)istream ^operator» (istream Sstream, inventory &ob){.cout « "Введите название предмета: ";stream » ob.item;cout « "Введите число выданньос экземпляров: ";stream » ob.onhand;cout « "Введите стоимость экземпляра: ";stream » ob.cost;return stream;}void inventory::store(fstream Sstream){stream.write(item, SIZE);ПриложениеВ.Ответынавопросыирешенияупражнений_61stream.
write ( (char *) sonhand, sizeof (int) ) ;stream. write ( (char *) ficost, sizeof (double) ) ;void inventory::retrieve(fstream sstream)stream, read(item, SIZE);stream.read((char *) fionhand, sizeof(int));stream.read((char *) ficost, sizeof(double));)int mainf)fstream invC'inv", ios::out I ios: :binary) ;int i;inventory pliers("плоскогубцы", 12, 4.95);inventory hammers("молотки", 5, 9.45);inventory wrenches{"ключи", 22, 13.90);inventory tempC'", 0, 0.0);if(!inv} {cout « "Файл для вывода открыть невозможно\п";return 1;// Запись в файлpliers.store(inv);hammers.store(inv);wrenches.store(inv);inv.
close {) ;// Открытие файла для вводаinv.open("inv", ios::in I ios::binary);if(!inv) {cout « "Файл для ввода открыть невозможной";return 1;do {cout « "Запись # (для выхода введите -1) : ";cin » i;if(i == -1) break;inv.seekg{i* (SIZE-t-sizeof (int) -fsizeof (double) ) , ios: :beg) ;temp. retrieve (inv) ;cout « temp;} while (inv.
good {) ) ;1612Самоучитель C++inv.close ();return 0;ГЛАВА 10Повторение пройденного1. ^include <iostream>using namespace std;ostream fisetsci (ostream fistream){stream. set f (ios: : scientific I ios: : uppercase) ;return stream;)int main ( ){double f = 123.23;cout « setsci « f;cout « '\n';return 0;2. // Копирование файла и преобразование табуляций в пробелы^include <iostreara>^include <fstream>using namespace std;int mainiint argc, char *argv[]}{if(argc!=3) {cout « "Копирование: <ввод> <вывод>\п";return 1;ifstream in(argv[l]};if(!in) {cout « "Файл ввода открыть невозможной";return 1;ПриложениеВ.Ответынавопросыирешенияупражненийofstreara out (argv[2j ) ;if ( l o u t ) {cout « "Файл вывода открыть невоэможно\п" ;return 1 ;char ch.;int i = 8;while ( ! in. eof (} ) {in.
get (ch) ;i f ( c h = = ' \ t ' ) f o r { ; i>0; i --) o u t . p u t C 'else out. put {ch};if (i==-l j I ch=='\n') i = 8;i —;in. close ( ) ;out .close {}return 0;3. // Поиск слова в файле^include <iostream>#include <fstrearn>^include <cstring>using namespace std;int mainlint argc, char *argv[]}{if (argc!=3) {cout « "Поиск: <файл> <слово>\пreturn 1 ;ifstream in(argv[l]);ifUin) {cout « "Файл ввода открыть невозможно \п";return 1;char str[255] ;int count = 0;while (! in.
eof (} ) iin » str;if ( !strcmp(str, argv[2])) count++;_613614_СамоучительC++cout « argv[2] « " найдено " « count;cout « " раз. \п";in. close () ;return 0;4. Искомой инструкцией является следующая:out.seekp (234, ios: :beg) ;5. Такими функциями являются rdstate(), good(), eof(), fail() и bad().6. Ввод/вывод C++ обеспечивает возможность работы с создаваемыми вамиклассами.Упражнения10.21.
^include <iostream>using namespace std;class num {public:int i;num(int x) {i = x; }virtual void shownumO ( cout « i « '\n'; }class outhex: public num {public:outhex (int n) : num{n) {}void shownumO ( cout « hex « i « ' \ n ' ; }class outoct: public num {public:outoct(int n) : num(n) { }void shownumO { cout « oct « i « ' \ n ' ; }int main(){outoct o(10) ;outhex h(20};o. shownumO ;h . shownum ( } ;ПриложениеВ.Ответынавопросыирешенияупражнений_6/5return 0;2. # include <iostream>using namespace std;class dist {public:double d;dist (double f) {d - f; }virtual void trav_time{}1cout « "Время движения со скоростью 60 миль/час:";cout « d / 60 « '\n';class metric: public dist {public:metric(double f ) : dist(f) {}void trav_time(){cout « "Время движения со скоростью 100 км/час:";cout « d / 100 « '\n';int main(){dist *p, mph(88.0) ;metric kph(88) ;p = &mph;p -> trav__time ( ) ;p = &kph;p -> trav_time (} ;return 0;10.32.
По определению в абстрактном классе содержится, по крайней мере, одначистая виртуальная функция. Это означает, что в классе отсутствует телоэтой функции. Таким образом, создание объекта абстрактного класса невозможно, поскольку определение класса неполно.616Самоучитель C++3. При вызове функции funcQ относительно класса derivedl используется функция ftincO из класса base.
Так происходит потому, что виртуальные функцииимеют иерархическую структуру.10.41. // Демонстрация возможностей виртуальных функций#include <iostream># include <cstdlib>using namespace std;class list {public:list *head;list *tail;list *next;int num;// указатель// указатель// указатель// число дляна начало спискана конец спискана следующий элемент спискахраненияlist () { head = tail = next = NULL; }virtual void store (int i) = 0;virtual int retrieve () = 0;// Создание списка типа очередьclass queue: public list {public:void store (int i) ;int retrieve (} ;void queue: : store (int i){list *itern;item = new queue;if (! item) {cout « "Ошибка выделения памяти\п";exit(l) ;}item -> num = i;// Добавление элемента в конец спискаif (tail) tail -> next = item;tail = item;item -> next = NULL;iff! head) head = tail;ПриложениеВ.Ответынавопросыирешенияint queue: : retrieve (){int i;list *p;if (! head) {cout « "Список пуст\п";return 0;i// Удаление элемента из начала спискаi = head -> num;p = head;head = head -> next;delete p;return i;// Создание списка типа стекclass stack: public list {public:void store (int i);int retrieve (} ;};void stack: : store (int i)Ilist *item;item = new stack;if (! item) {cout « "Ошибка выделения памяти\пexit ( 1 ) ;i•item -> num = i;// Внесение элемента в начало спискаif (head) item -> next = head;head = item;if ('tail) tail = head;Iint stack : : retrieve ( ){int i;list *p;if (! head) {cout « "Список пуст\п";упражнений_617_618Самоучительreturn 0;// Удаление элемента из начала спискаi = head -> пшп;р = head;head = head -> next;delete p;return i;1// Создание отсортированного спискаclass sorted: public list {public:void store (int i) ;int retrieve () ;};void sorted: : store (int i)flist *item;list *p, *p2;item = new sorted;if (! item) {cout « "Ошибка выделения памяти\п";exit(l);}item -> nura = i;// Поиск места внесения следующего элемента спискар = head;р2 = NULL;while (р) { // идем в серединуif (p->num > i) {item -> next = p;if(p2) p2 -> next = item; // не первый элементif (p==head) head = item; // новый первый элементbreak;1p2 = p;p = p -> next;}if{!p) { // идем в конецif (tail) tail -> next = item;tail = item;item -> next = NULL;C++ПриложениеВ.Ответы^навопросыирешенияi f ( ! h e a d ) // первый элементhead = item;int sorted: :retrieve(){int i;list *p;if(lhead) {cout « "Список пуст\п";return 0;// Удаление элемента из начала спискаi = head -> num;p = head;head = head -> next;delete p;return i;int main()(list *p;// Демонстрация очередиqueue q ob;i- /// / указывает на очередьp - £q_ob;p -> store (1} ;p -> store (2) ;p -> store (3} ;cout «: "Очередь: ";cout « p -> retrieve ( ) ;cout « p -> retrieve C);cout « p -> retrieve ();cout « '\n';// Демонстрация стекаstack s_ob;p = &s_ob; // указывает на стекp -> store (1) ;p -> store (2) ;p -> store (3) ;cout « "Стек: ";cout « p -> retrieve (};упражнений_6/9620_.__СамоучительC++cout « р -> retrieve!);cout « р -> r e t r i e v e d ;cout « ' \ n ' ;// Демонстрация отсортированного спискаsorted sorted_ob;p = &sorted_ob;ppppp->->->->->coutcoutcoutcoutcoutcoutstore (4) ;store (1) ;store (3) ;store (9) ;store (5) ;« "Отсортированный список : " ;« p -> retrieved;« p -> retrieved;« p -> retrieved;« p -> retrieved;« p -> retrieved;cout « '\n';return 0;Проверка усвоения материала главы 101.