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

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

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


3 Глава
1.  Напишите короткую программу, которая запрашивает рост в дюймах и преобразует их в футы и дюймы. Программа должна использовать символ подчерки­вания для обозначения позиции, где будет производиться ввод. Для представле­ния коэффициента преобразования используйте символьную константу const.


#include "stdafx.h"
#include <iostream>  

using namespace std;

int main()
{
cout << "Enter your growth in sm: ___\b\b\b";
int growth;
const char k = 100; 
cin >> growth;
cout << "Your growth:" << endl << growth/k << " m" << endl << growth%k << " sm" << endl;
cout << k << endl;
return 0;
}


4 Глава

1.  Напишите программу C++, которая запрашивает и отображает информацию, как показано в следующем примере вывода:
What is your first папе? Betty Sue
What is your last name? Ycwe
What letter grade do you deserve? В
what is your age? 22
Name: Yewe, Betty Sue
Grade: C
Age: 22
Обратите внимание, что программа должна принимать имена, состоящие из более чем одного слова. Кроме того, программа должна уменьшать значение grade на одну градацию - т.е. на одну букву выше. Предполагается, что пользо­ватель может ввести А, В или С поэтому вам не нужно беспокоиться о пропус­ке между D и F.
2.  Перепишите листинг 4.4, применив класс C++ string вместо массивов char.
3.  Напишите программу, которая запрашивает у пользователя имя, фамилию, а затем конструирует, сохраняет и отображает третью строку, состоящую из фа­милии пользователя, за которой следует запятая, пробел и его имя. Используйте массивы char и функции из заголовочного файла cstring. Пример запуска должен выглядеть так:
Enter your first name: Flip Enter your last name: Fleming
Here’s the information in a single string: Fleming, Flip
4.  Напишите программу, которая приглашает пользователя ввести его имя и фа милию, а затем построит, сохранит и отобразит третью строку, состоящую из фамилии, за которой следует занятая, пробел и имя. Используйте объекты string и методы из заголовочного файла string. Пример запуска должен вы­глядеть так:
Enter your first name: Flip Enter your last name: Fleming
Here's the information in a single string: Fleming, Flip
5.  Структура CandyBar содержит три члена. Первый из них хранит название ко­робки конфет. Второй - ее вес (который может иметь дробную часть), а тре­тий — число калорий (целое значение). Напишите программу, объявляющую эту структуру и создающую переменную типа CandyBar по имени snack, ини­циализируя ее члены значениями "Mocha Munch", 2.3 и 350, соответственно. Инициализация должна быть частью объявления snack. И, наконец, программа должна отобразить содержимое этой переменной.
6.  Структура CandyBar включает три члена, как описано в предыдущем упражне­нии. Напишите программу, которая создает массив из трех структур CandyBar, инициализирует их значениями по вашему усмотрению и затем отображает со­держимое каждой структуры.

7.    Вильям Вингейт (William Wingate) заведует службой анализа рынка пиццы. О каждой пицце он записывает следующую информацию:
     наименование компании — производителя пиццы, которое может состоять из более чем одного слова;
     диаметр пиццы;
     вес пиццы.
     Разработайте структуру, которая может содержать всю эту информацию, и напишите программу, использующую структурную переменную этого типа. Программа должна запрашивать у пользователя каждый из перечисленных показателей и затем отображать введенную информацию. Применяйте cin (или его методы) и coût.
8.    Выполните упражнение 7, но с применением операции new для размещения структуры в свободном хранилище вместо объявления структурной перемен­ной. Кроме того, сделайте так, чтобы программа сначала запрашивала диаметр пиццы, а потом — наименование компании.
9.    Выполните упражнение 6, но вместо объявления массива из трех структур CandyBar используйте операцию new для динамического размещения массива.
10.   Напишите программу, которая приглашает пользователя ввести три результа­та забега на 40 ярдов (или 40 метров, если желаете) и затем отображает эти значения и их среднее. Для хранения данных применяйте объект array. (Если объект array не доступен, воспользуйтесь встроенным массивом.)



1

#include "stdafx.h"
#include <iostream>  

using namespace std;

void main()
{
char name[20];
char soname[20];
char letter;
int age;

cout << "What is your first name?" << endl;
cin.getline(name, 20); //принимает значения с пробелма, не оставляет ENTER в буфере
cout << "What is your last name?" << endl;
cin.getline(soname, 20);
cout << "What letter grade do you deserve?" << endl;
cin >> letter;
cout << "What is your age?" << endl;
cin >> age;
cout << "Name: " << name << ", " << soname << endl;
cout << "Grade: " << char(letter+1) << endl; //увеличение буквы на одну, изменение типа вывода на char
cout << "Age: " << age << endl;
}


2


#include "stdafx.h"
#include <iostream>  
#include <string>
#include <cstring>

using namespace std;

void main()
{
string name;
string soname;
char letter;
int age;

cout << "What is your first name?" << endl;
getline (cin, name);//принимает значения с пробелами, для string
cout << "What is your last name?" << endl;
getline (cin, soname);
cout << "What letter grade do you deserve?" << endl;
cin >> letter;
cout << "What is your age?" << endl;
cin >> age;
cout << "Name: " << name << ", " << soname << endl;
cout << "Grade: " << char(letter+1) << endl; //увеличение буквы на одну, изменение типа вывода на char
cout << "Age: " << age << endl;
}

3



#include "stdafx.h"
#include <iostream>  

using namespace std;

void main()
{
char name[20];
char soname[20];
char NAME[40];
cout << "What is your first name?" << endl;
cin.getline(name, 20); //принимает значения с пробелма, не оставляет ENTER в буфере
cout << "What is your last name?" << endl;
cin.getline(soname, 20);
strcpy_s (NAME, soname); //копирование в общий массив фамилии
strcat_s (NAME, ", "); // добавление ,
strcat_s (NAME, name); // добавление в конец имени
cout << "Name: " << NAME << endl;

}


4




#include "stdafx.h"
#include <iostream> 
#include <string>
#include <cstring>

using namespace std;

void main()
{
string name;
string soname;
string NAME;
cout << "What is your first name?" << endl;
getline (cin, name);//принимает значения с пробелами, для string
cout << "What is your last name?" << endl;
getline (cin, soname);
NAME = soname;
NAME += ", ";
NAME += name;
cout << "Name: " << NAME << endl;

}



5


#include "stdafx.h"
#include <iostream> 
#include <string>
#include <cstring>

using namespace std;


struct CandyBar
{
string Name;
int kkal;
double weight;
};

void main()
{
CandyBar snack = {"Mocha Munch", 350, 2.3};
cout << "Candy: " << snack.Name <<endl;
cout << snack.kkal << " Kkal" << endl;
cout  << "Weight: " << snack.weight << endl;
}



6




#include "stdafx.h"
#include <iostream> 
#include <string>
#include <cstring>

using namespace std;


struct CandyBar
{
string Name;
int kkal;
double weight;
};

void main()
{
CandyBar snack[3] = {"Mocha Munch", 350, 2.3,
                    "Bounty", 445, 0.8,
                         "Snickers", 540, 1};
cout << "Candy 1: " << snack[0].Name <<endl;
cout << snack[0].kkal << " Kkal" << endl;
cout  << "Weight: " << snack[0].weight << endl;
cout << "Candy 2: " << snack[1].Name <<endl;
cout << snack[1].kkal << " Kkal" << endl;
cout  << "Weight: " << snack[1].weight << endl;
cout << "Candy 3: " << snack[2].Name <<endl;
cout << snack[2].kkal << " Kkal" << endl;
cout  << "Weight: " << snack[2].weight << endl;
}



7



#include "stdafx.h"
#include <iostream> 
#include <string>
#include <cstring>

using namespace std;


struct Pizza
{
string NameOfComp;
double diam;
double weight;
};

void main()
{
Pizza pizza;
cout << "Name of company" << endl;
getline (cin, pizza.NameOfComp);
cout << "Diameter" << endl;
cin >> pizza.diam;
cout << "weight" << endl;
cin >> pizza.weight;
cout << "Name of company: " << pizza.NameOfComp << endl;
cout << "Diameter: " << pizza.diam << endl;
cout << "weight: " << pizza.weight << endl;
}






8




#include "stdafx.h"
#include <iostream> 
#include <string>
#include <cstring>

using namespace std;


struct Pizza
{
string NameOfComp;
double diam;
double weight;
};

void main()
{
Pizza *pizza = new Pizza;
cout << "Name of company" << endl;
getline (cin, pizza->NameOfComp);
cout << "Diameter" << endl;
cin >> pizza->diam;
cout << "weight" << endl;
cin >> pizza->weight;
cout << "Diameter: " << pizza->diam << endl;
cout << "Name of company: " << pizza->NameOfComp << endl;
cout << "weight: " << pizza->weight << endl;
}






9



#include<iostream>
#include<string>
struct CandyBar
{
    std::string name;
    float weight;
    int   calor;

};
void main()
{
using namespace std;
    
    CandyBar *ps = new CandyBar [3]; //создание динамической структуры из 3 элементов
    
    ps[0].name= "Muncha Mon";//динамический массив нельзя инициализировать как статический массив, потому приходится инициализировать его почлено, т.к. это противоречит принципу и логике выделения динамической памяти
    ps[0].weight=350.5;
    ps[0].calor=12;
    ps[1].name= "Body Scru";
    ps[1].weight=125.7;
    ps[1].calor=38;
    ps[2].name   = "Dobey Bru";               
    ps[2].weight = 30.1;                      
    ps[2].calor  = 63;                        
    
    cout<<"1 struct: "<<ps[0].name<<", "<<ps[0].weight<<", "<<ps[0].calor<<"."<<endl;
    cout<<"2 struct: "<<ps[1].name<<", "<<ps[1].weight<<", "<<ps[1].calor<<"."<<endl;
    cout<<"3 struct: "<<ps[2].name<<", "<<ps[2].weight<<", "<<ps[2].calor<<"."<<endl;

    delete [] ps;


}





10



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

void main()
{
array <double, 3> run; //использование шаблонного массива, тип элементов, их количество, название
cout << "result of the first race: " << endl;
cin >> run[0];
cout << "result of the second race: " << endl;
cin >> run[1];
cout << "result of the third race: " << endl;
cin >> run[2];

cout << "result of the first race: " << run[0] << endl;
cout << "result of the second race: " << run[1] << endl;
cout << "result of the third race: " << run[2] << endl;
cout << "Mean: " << (run[0] + run[1] + run[2]) / 3 << endl;
}






Комментарии

  1. Здравствуй, смотрел твои решения по Прату, тоже его читаю, я на 4 главе, учил когда-то программировать еще в далеком 2004 году, надеюсь если будут вопросы можно будет к тебе обратится?... так как иногда нужно спросить, а не знаешь к кому обратиться...

    ОтветитьУдалить
    Ответы
    1. без проблем, обращайся, я создала этот блог для тех кому нужна помощь)

      Удалить
  2. Еще вопрос почему ты везде включаешь библиотеку #include "stdafx.h" где и какие функции она выполняет в проге?

    ОтветитьУдалить
    Ответы
    1. файл, который служит для генерации файла предкомпилированных заголовков; в него включено большинство стандартных и используемых в каждом приложении включаемых файлов. Сделано это для того, чтобы ускорить компиляцию проекта.
      это особенность среды visual studio

      Удалить
  3. спасибки посмотрю что так внутри

    ОтветитьУдалить
  4. эээ чет у меня такой библиотеки вообще нет, выдает ошибку

    ОтветитьУдалить
  5. у меня 12. если у тебя без этого заголовка запускается - не надо его пихать)

    ОтветитьУдалить
  6. у меня 10. я прочел 4 главу запутали меня немного указатели, структуры вроде понятно на подобии функций, теперь думаю прочитать заново 4 главу, решил задачки поделать в 3 задаче strcаt: идентификатор не найден пишет подключил вроде cstring iostream все равно не могу понять в чем дело посмотрел как ты сделала, вообще запутался))) например мне не понятно вот это strcat_s что там s на конце забыл...

    ОтветитьУдалить
  7. ой идиооооот ой придурраааак я за место strcаt писал strcut вот он и ругается... пардон)))

    ОтветитьУдалить
  8. Этот комментарий был удален автором.

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. Привет, очень хорошие решения. Но. Прочти еще раз условие 8 задания, 4 главы. Решение немного не такое. Там есть хитрость.

    ОтветитьУдалить

Отправить комментарий

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

ВОПРОС К ЧИТАТЕЛЯМ

Уважаемые читатели моего блога и просто проходящие мимо! У меня появилась идея заняться созданием уроков по интересующим вас темам. Предпочтительно на C++, но не ограничиваясь ими, я хочу поделиться своими знаниями не только в виде готового кода но и подробными объяснениями что к чему. Прошу вас, если вы имеете идею и хотели бы разобраться в какой-то теме - отпишитесь в комментариях, что было бы вам интересно. Постараюсь помочь. 

7 глава, Лафоре Р

*1. Напишите функцию reversit(), которая переворачивает строку (массив типа char). Используйте цикл for, который меняет местами первый и последний символы, затем следующие и т. д. до предпоследнего. Строка должна пере- даваться в функцию reversit() как аргумент. Напишите программу для выполнения функции reversit(). Программа долж- на принимать строку от пользователя, вызывать функцию reversit(), а за- тем выводить полученный результат. Используйте метод ввода, который позволяет использовать внутренние пробелы. Протестируйте программу на примере фразы «Аргентина манит негра».

6 глава, Лафоре Р

*1. Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут инициализированы. Сложите два инициализирован- ных объекта, присвойте результат третьему, а затем отобразите результат на экране.