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

Прата С. Решение 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 главы. Решение немного не такое. Там есть хитрость.

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

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

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

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

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

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

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