К основному контенту

Возвращаюсь в ряды плюсовиков. Шаблоны C++

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



// лаба адын.cpp: определяет точку входа для консольного приложения.
//Создать шаблонную функцию для ввода с клавиатуры и вывода на экран массива элементов. Разработать программу, в которой созданная шаблонная функция используется для пользовательского типа данных 
//сделать шаблонную функцию, которая будет использоваться для класса

//

#include "stdafx.h"
#include <iostream>
#include <iomanip> 
using namespace std;

class Class 
{
public: 
template <typename T>
void getArray( T * array, int count)
{
for (int i = 0; i < count; i++) 
{
cout << "Enter Value of " << i+1 << " element is " << endl;
cin >> array[i];
}
for (int ix = 0; ix < count; ix++)
{
cout << array[ix] << "   ";
}
    cout << endl;

 };

int _tmain(int argc, _TCHAR* argv[])
{

int num; // размер массива
    cout << "Enter integer value: ";
    cin >> num; // получение от пользователя размера массива
    int *p_darr = new int[num]; // Выделение памяти для массива
Class ob1;
ob1.getArray(p_darr, num);
    delete [] p_darr; // очистка памяти
    system("pause");
return 0;
}

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

#include "stdafx.h"
#include <iostream>
#include <iomanip> 
using namespace std;

template <typename T>
void rev(T& a, T& b)
{
    T temp;
temp = a;
a = b;
b = temp;


template <typename T>
 T lineage(T a, T b)
 {
return (((-1)*b)/a);
 }


int _tmain(int argc, _TCHAR* argv[])
{
int A, B;
A = 1;
B = 2;
rev (A, B);
cout << A << endl << B << endl;
cout << lineage (4, 5) << endl;
    system("pause");
return 0;
}

// лаба адын.cpp: определяет точку входа для консольного приложения.
//Разработать класс, содержащий информацию о машине (марка, производитель, объем двигателя, масса, тип коробки передач, объем багажника, грузоподъемность). 
//Предусмотреть возможность раздельного ввода данных, ввода данных из файла.
//Определить методы для вычисления возраста машины и возможности перевезти груз с заданным объемом\весом.

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class automobile
{
private:
string mark;
string seller;
int volume;
int weight;
string typeBox;
int volumeTrunk;
int carryingCapacity;
public:

void in()
{
ifstream fin("cppstudio.txt"); // открыли файл для чтения
fin >> mark >> seller >> volume >> weight >> typeBox >> volumeTrunk >> carryingCapacity; // считали первое слово из файла
}
void display()
{
cout << mark << "    " << seller << "    " << volume << "    " << weight << "    "<< typeBox << "    " << volumeTrunk << "    " << carryingCapacity << endl;
}
int age(int year1)
{
return (2015 - year1);
}
bool opportunity(int vol, int wei)
{
if((vol < volume) && (wei < weight))
return true;
else
return false;
}


};

int _tmain(int argc, _TCHAR* argv[])
{
automobile ob;
int Y1;
ob.in();
ob.display();
int vol, wei;
cout << "calculate the age of the machine and the possibility to carry the goods with a given volume\weight. " << endl << "Enter Graduation Year: ";
cin >> Y1;
cout << ob.age(Y1) << endl;
cout << "enter volume and weight: ";
cin >> vol >> wei;
(ob.opportunity(vol, wei)) ? cout << "true" : cout << "false";
cout << endl;
    system("pause");
return 0;
}


// лаба адын.cpp: определяет точку входа для консольного приложения.
//Определить класс, хранящий такую информацию о пользователе библиотеки: ФИО, номер читательского билета, факультет,  дата рождения, телефон, дата последнего посещения библиотеки. 
//Доступ к данным класса организовать посредством соответствующих функций-членов. Разработать программу, в которой создается массив объектов данного класса (заполнение массива из файла и клавиатуры). 
//В программе организовать:
//– ввод данных о заданном читателе (фамилия);
//– вывод информации о читателях которые были в библиотеке после указанной даты;
//- вывод информации о пользователях младше заданного возраста.


#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class Date
{
private:
int day;
int month;
int year;
public:
void get()
{
cin >> day >> month >> year;
}
void display()
{
cout << day << "/" << month << "/" << year;
}
bool operator > (Date d)

{
int date = d.day + d.month*
      return true;
   else
      return false;

   }


class library
{
private:
string name;
string soname;
int num;
string facult;
string DOB;
int phone;
string last_date;
public:
void display()
{
cout << name << "   " << soname << "   " << num  << "   " << facult  << "   "<<DOB  << "   "<< phone << "   " << last_date << endl;
}
void in()
{
ifstream fin("cppstudio.txt"); // открыли файл для чтения
fin >> name >> soname >> num >> facult >> DOB >> phone >> last_date; // считали первое слово из файла
}
void get()
{
cout << "Enter Name, library card number , department, date of birth, phone number, date of last visit to the library. " <<  endl;
cin >> name >> soname >> num >> facult >> DOB >> phone >> last_date;
}
void change_son(string son)
{
soname = son;
}

};

int _tmain(int argc, _TCHAR* argv[])
{
library lib[2];
int num_reader;
string son;
lib[0].in();
lib[1].get();
lib[0].display();
lib[1].display();
cout << "Enter number reader" << endl;
cin >> num_reader;
cout << "Enter new soname" << endl;
cin >> son;
lib[num_reader-1].change_son(son);
lib[num_reader-1].display();

    system("pause");
return 0;
}





Комментарии

Популярные сообщения из этого блога

Прата С. Решение задач 6 главы

На решение этих задач у меня ушло 2 дня. Становится все интереснее и интереснее! и черт возьми, я наконец-то поняла работу с файлами! прошу прощения за корявые условия. просто в нормальном формате электронной книги у меня нет, потому скрины задач просто пропущены через Файнридер.

Прата С. решение задач 5 главы

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

Прата С. Решение 3 и 4 главы

Повторюсь, взяла только интересные мне задания, т.е. с элементами того что поняла плохо/не встречала ранее. Сделала за сегодня. с удовольствием отмечаю что сдвиги  в положительную сторону  хотя-бы в стиле есть . в 4 главе ясно объяснено почему при вводе нескольких строк начинаются проблемы, и как этого избежать, подробно описана работа с входным потоком. Как работать со строками стиля Си и класса String, разница. для себя я сделала выводы что лучше всего, конечно-же класс string. намного меньше мороки. и метод ввода getline в обоих случаях. в задачах разница проиллюстрирована. и кстати, указатели больше не вызывают у меня ужаса и трепета. много нового узнала о видах структур. эта глава расставила все по местам в моей голове. правда, зачем в задачи на СР втиснута работа с массивом array - загадка. он ведь толком не объяснен, но понять его интуитивно можно, правда, зачем его использовать не зная тонкостей, как обычный массив с немного иным объявле...