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

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

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



1. Напишите программу, запрашивающую у пользователя ввод двух целых чисел. Затем программа должна вычислить и выдать сумму всех целых чисел, лежащих между этими двумя целыми. Предполагается, что меньшее значение вводится первым. Например, если пользователь ввел 2 и 9, программа должна сообщить, что сумма всех целых чисел от 2 до 9 равна 44.

2. Перепишите код из листинга 5.4 с использованием объекта array вместо встроенного массива и типа long double вместо long long. Найдите значение 100!

3. Напишите программу, которая приглашает пользователя вводить числа. После каждого введенного значения программа должна выдавать накопленную сумму введенных значений. Программа должна завершаться при вводе 0.

4. Дафна инвестировала $100 под простые 10%. Другими словами, ежегодно инвестиция должна приносить 10% инвестированной суммы, т.с. $10 каждый год;

прибыль = 0,10 х исходный баланс

В то же время Клео инвестировала $100 под сложные 5%. Это значит, что прибыль составит 5% от текущего баланса, включая предыдущую накопленную прибыль: прибыль = 0,05 х текущий баланс

Клео зарабатывает 5% от $100 в первый год, что дает ей $105. На следующий год она зарабатывает 5% от $105, что составляет $5.25, и т.д. Напишите программу, которая вычислит, сколько лет понадобится для того, чтобы сумма баланса Клео превысила сумму баланса Дафны, с отображением значений обоих балансов за каждый год.

5. Предположим, что вы продаете книгу по программированию па языке C++ для начинающих. Напишите программу, которая позволит ввести ежемесячные объемы продаж в течение года (в количестве книг, а не в деньгах). Программа должна использовать цикл, в котором выводится приглашение с названием месяца, применяя массив указателей на char (или массив объектов string, если вы предпочитаете его), инициализированный строками — названиями месяцев, и сохраняя введенные значения в массиве int. Затем программа должна найти сумму содержимого массива и выдать общий объем продаж за год.
6. Выполните упражнение 5, но используя двумерный массив для сохранения данных о месячных продажах за 3 года. Выдайте общую сумму продаж за каждый год и за псе годы вместе.

7. Разработайте структуру по имени саг, которая будет хранить следующую информацию об автомобиле: название производителя в виде строки в символьном массиве или в объекте string, а также год выпуска автомобиля в виде целого числа. Напишите программу, которая запросит пользователя, сколько автомобилей необходимо включить в каталог. Затем программа должна применить new для создания динамического массива структур саг указанного пользователем размера. Далее она должна пригласить пользователя ввести название производителя и год выпуска для наполнения данными каждой структуры в массиве (см. главу 4). И, наконец, она должна отобразить содержимое каждой структуры. Пример запуска программы должен выглядеть подобно следующему:

Сколько автомобилей поместить в каталог? 2 Автомобиль #1:

Введите производителя: Hudson Hornet Укажите год выпуска: 1952 Автомобиль #2:

Введите производителя: Kaiser Укажите год выпуска: 1951 Вот ваша коллекция:

1952 Hudson Hornet 1951 Kaiser

8. Напишите программу, которая использует массив char и цикл для чтения по одному слову за раз до тех пор, пока нс будет введено слово done. Затем программа должна сообщить количество введенных слов (исключая done). Пример запуска должен быть таким:

Вводите слова (для завершения введите слово done): antoator birthday category dumpster envy finagle geometry done for sure

Вы ввели 1 слов.

Вы должны включить заголовочный файл cstring и применять функцию strcmpO для выполнения проверки.

9. Напишите программу, соответствующую описанию программы из упражнения 8, но с использованием объекта string вместо символьного массива. Включите заголовочный файл string и применяйте операции отношений для выполнения проверки.

10. Напишите программу, использующую вложенные циклы, которая запрашивает у пользователя значение количества строк для отображения. Затем она должна отобразить указанное число строк со звездочками, с одной звездочкой в первой строке, двумя — во второй и т.д; В каждой строке звездочкам должны предшествовать точки — в таком количестве, чтобы общее число символов в каждой строке было равно количеству строк. Пример запуска программы должен выглядеть следующим образом:

Введите количество строк: 5


1





#include "stdafx.h"

#include<iostream>

using namespace std;


void main()

{
int a, b, sum;
cout << "Enter 1 num" << endl;
cin >> a;
cout << "Enter 2 num" << endl;
cin >> b;
sum = a;
for (int i = a+1; i<=b; i++)
sum += i;
cout << "Summa: " << sum << endl;
}


2



#include "stdafx.h"

#include<iostream>
#include<array>
using namespace std;

const int ArSize = 101; // пример внешнего объявления


void main() 

{

array <long double, ArSize> factorials;

factorials[1] = factorials[0] = 1LL;

for (int i = 2; i < ArSize; i++)

factorials[i] = i * factorials[i-1];

for (int i = 0; i < ArSize; i++ )

cout << i <<"! = " << factorials[i] << endl; 
}


3




#include "stdafx.h"

#include<iostream>

using namespace std;



void main() 

{
int num, sum = 0;

cout << "Enter num" << endl;
cin >> num;
sum = num;

do

{
cin >> num;
sum += num;
cout << "Summa: " << sum << endl;
}
while (num != 0);
}


4




#include "stdafx.h"

#include<iostream>

using namespace std;



void main() 

{
double Dafna = {100}, Kleo = {100}; //инициализация в стиле С++ 11
int i = 1;
while (Kleo <= Dafna)
{
cout << i << " year" << endl;
Dafna += 10;
cout << "Dafna: " << Dafna << "$" << endl;
double temp = Kleo * 0.05;
Kleo += temp;
cout << "Kleo: " << Kleo << "$" << endl;
cout << "***************************" << endl;
i++;
}
cout << i-1 << " years later Kleo get more than Dafna" << endl;
}



5




#include "stdafx.h"

#include<iostream>
#include <string>
using namespace std;
const int MONTH = 12;

void main() 

{
string month[MONTH] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string *months = month; // создание указателя на массив string
int salers[MONTH];

for ( int i = 0; i < MONTH; i++ )

{
cout << "what volume of sales for " << *(months + i) << "?" << endl; // разыменование указателя на элемент массива. т.к. адресс массива есть адресс первого элемента, прибавление i эквивалентно перемещению указателя на число байт типа * i
cin  >> salers[i];
}
int sum = salers[0];

for (int i = 1; i<MONTH; i++)

sum += salers[i];

cout << "amount for the whole year: " << sum << endl;

}


6





#include "stdafx.h"

#include<iostream>
#include <string>
using namespace std;
const int MONTH = 12;
const int YEAR = 3;

void main() 

{
string month[MONTH] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string *months = month; // создание указателя на массив string
int salers[YEAR][MONTH];

for ( int i = 0; i < YEAR; i++ )

{
cout << i+1 << " year:" << endl;
for ( int j = 0; j < MONTH; j++ )
{
cout << "what volume of sales for " << *(months + j) << "?" << endl; // разыменование указателя на элемент массива. т.к. адресс массива есть адресс первого элемента, прибавление i эквивалентно перемещению указателя на число байт типа * i
cin  >> salers[i][j];
}
}

int allsum = NULL;


for ( int i = 0; i < YEAR; i++ )

{
int sum = salers[i][0];
for ( int j = 1; j < MONTH; j++ )
{
sum += salers[i][j];
}
cout << "amount for the whole " << i+1 << " year: " << sum << endl;
allsum += sum;
}
cout << "amount for the whole " << YEAR << " year: " << allsum << endl;

}



7




#include "stdafx.h"

#include<iostream>
#include <string>

using namespace std;


struct Car 

{
string name;
int year;
};

void main() 

{
int items;
cout << "how many cars you want to include in the catalog?" << endl;
cin >> items;
Car *cars = new Car[items]; // создаем динамический массив структур
for (int i = 0; i<items; i++)
{
cout << i+1 << " auto" << endl;
cout << "Enter model of auto" << endl;
cin >> cars->name; 
cout << "Year of auto" << endl;
cin >> cars->year;
cars ++; // перемещаем указатель на количество байт струкруры, таким образом он переходит на следующий элемент массива 
}

cout <<"This is your collection: " << endl;

for (int i = 0; i<items; i++)
{
cars--; //в обратном порядке показываем данные, пеемещая назад указатель на количество байт структуры
cout << i+1 << " auto" << endl;
cout << "Model of auto: " << cars->name << endl;
cout << "Year: " << cars->year << endl;

}
}





8





#include "stdafx.h"

#include<iostream>
#include <cstring>

using namespace std;




void main() 

{
char word[20];
int count = 0;
cout << "Enter words. for complete enter done" << endl;
do
{
cin >> word; // так как операция cin принимает по одному слову, игнорируя разделительные знаки, она будет принимать по одному слову пока не выполнится условие
count ++;
}
while (strcmp(word, "done")); // цикл будет выполняться пока false, не обязательно писать while(strcmp(word, "done") != 0);
cout << "You entered " << count-1 <<  " words" << endl;
}

9



#include "stdafx.h"

#include<iostream>
#include <string>


using namespace std;




void main() 

{
string word;
int count = 0;
cout << "Enter words. for complete enter done" << endl;
do
{
cin >> word; // так как операция cin принимает по одному слову, игнорируя разделительные знаки, она будет принимать по одному слову пока не выполнится условие
count ++;
}
while (word != "done"); // пока слово не станет равно done 
cout << "You entered " << count-1 <<  " words" << endl;
}

10



#include "stdafx.h"

#include<iostream>
using namespace std;


void main() 

{
int i;
char s = '*';
char d = '.';
cout << "Enter figure: ";
cin >> i;

for (int n = 1; n <= i; n++)
    {
       for (int j = 0; j < i - n; j++)
        cout << d;
       for (int j = 0; j < n; j++)
        cout << s;
       cout << endl;
    }
}

Комментарии

  1. Для 7 задания нужен вывод строки- getline(cin, cars->name). В приведенном виде, программа завершает работу при чтении более 1 слова(как в примере в книге), но и при замене также. 7 задание выполнено не до конца

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

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

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

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

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

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

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

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

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