Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

visual C++ 2010 (глава 2) Решение задач.

Posted on 13 июля, 201420 июля, 2014 by admin

QIP Shot - Screen 067Здорова господа! Я сейчас читаю книгу «Visual C++ полный курс» автор Айвор Хортон, ну и в общем решил решать задачки, там их не много, примерно по 5 задач после каждой главы, от буду создавать пост и внем выкладывать все решения задач которые я сам делаю. Да задачи эти уже решены и можно скачать на сайте автора книги, но я как то хочу сам решать, даже в решение не охота подсматривать, книга эта как бы для новичков и я это все уже как бы знаю. Да и задачки легкие, не то что у Страуструпа.

[tip]

Упражнение 1

Напишите программу ISO/IEC C++, которая предлагает пользователю ввести число, а затем отображать его, используя локальную целочисленную переменную.

Показать »

Эта от видите легкая задачка, тут ее по сути дела нечего решать. Для детей начальные задачи.

От код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
int count;
 
int main()
{
setlocale(LC_ALL,"Russian");
int count=11;
{
int count=10;
cout <<"Введите число"<<endl;
cin >>::count;
cout <<"локально count= "<<count<<endl;
cout <<"глобальный равен ::count= "<<::count<<endl;
}
cout <<"еще локально count= "<<count<<endl;
cout <<"глобальный равен ::count= "<<::count<<endl;
 
return 0;
}

вывод:
QIP Shot - Screen 068

[/tip]

[tip]

Упражнение 2

Напишите программу, которая читает с клавиатуры целочисленное значение в переменную типа int и использует один из битовых операторов (но не %) для определение положительного остатка от деления на 8. Например, 29=(3*8)+5 и -14=(-2*8)+2 имеют положительные остатки 5 и 2 соответственно.

Показать »

Да тут хз что делать
не сильно то я понял что и куда.
Я короче подсмотрел как решена задача, пришлось подсмотреть, такую задачку я еще не решал.
И так нужно использовать операции сдвиг влево и сдвиг вправо (>><<)
Мы сдвигаем вправо на 3 и это эквивалентно операции деления на 8 без остатка то есть 2*2*2, если сдвигаем влево на 4 то эквивалентно 2*2*2*2

>>1 эквевалентно делению без остатка на 2
>>2 эквевалентно делению без остатка на 2*2
>>3 эквевалентно делению без остатка на 2*2*2
>>4 эквевалентно делению без остатка на 2*2*2*2
… и т.д.
Ну в общем разобрался от код решения:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
setlocale(LC_ALL,"Russian");
int num;
 
cout <<"Введите число..."<<endl;
cin >>num;
cout <<"Остаток от деления на 8 будет ";
cout <<num-((num>>3)<<3)<<endl;
cout <<"Остаток от деления на 16 будет ";
cout <<num-((num>>4)<<4)<<endl;
 
return 0;
}

 
вывод:
QIP Shot - Screen 069

[/tip]

[tip]

Упражнение 3

Вставьте скобки в следующие выражения, чтобы проиллюстрировать приоритеты и ассоциативность.

1+2+3+4
16*4/2*3
а>b?a:c>d? e: f
a & b && c & d

Показать »

(((1+2)+3)+4)
(((16*4)/2)*3)
(a>b?a:(c>d?e:f))
((a&b)&&(c&d))

[/tip]

[tip]

Упражнение 4

Напишите программу которая вычисляет разрешение экрана вашего компьютера по заданным значениям ширины и высоты в пикселях, используя следующие операторы.
int width=1280;
int height=1024;
double aspect=width/height;

Показать »

Ну что ж попробуем, это легкая задачка.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using std::cout;
using std::endl;
 
int main()
{
int width=1280;
int height=1024;
double aspect=static_cast<double>(width)/height;
cout <<"aspect= "<<aspect<<endl;
 
return 0;
}

Вывод:

QIP Shot - Screen 070

 

[/tip]

[tip]

Упражнение 5

Какой ответ вы получите в результате? Будет ли он удовлетворительным? Если нет, то как следует изменить код не добавляя новые переменные?

Показать »

Да хз. вроде все как нужно вывел хз.А ну я думаю вопрос в том что нужно было использовать операцию static_cast<dobule>() просто перевести одно из значений в double что б и второе тоже перевелось, а иначе получается неправильный результат. Если мы поделим width/height, то мы получим фигню в ответ целое число 1 и остаток от деления у нас потеряется, поэтому в упражнении 4 я использую static_cast<double>(width) — преобразую переменную в double ну и тогда уже и вторая переменная height автоматически преобразуется в тип double-в высший тип.

[/tip]

[tip]

Упражнение 6

(Дополнительно) Не запуская на выполнение следующий код, можете ли вы сказать, какой результат он выдаст и почему?
unsigned s=555;
int i=(s>>4)&~(0<<3);
cout <<i;

Показать »

Я сам хз. не понял что происходит, пришлось подсмотреть.s>>4 — двигает биты s вправо на 4 знака. Это равносильно делению на 2*2*2*2 (16)выражение ~0 переворачивает все биты нулевые в 1, то есть будет максимальное число unsignedвыражение (~0 << 3) двигает все биты влево на 3, то есть получится что первые 3 бита будут установлены в 0.

выражение ~(~0 >> 3) переворачивает все биты, то есть первые 3 бита которые в 0 станут в 1, а остальные которые в 1 станут в 0

выражение (s >> 4) & ~(~0 << 3) типо будет в двоичном представлении, но я не понял как это так, а ну там типо 0000 0000 0000 0000 0000 0000 0100 0010 (34) и применяем операцию & с числом 0000 0000 0000 0000 0000 0000 0000 0111 и у нас получается число 0000 0000 0000 0000 0000 0000 0000 0010.

ну я честно так сходу и не понял что там так.

[/tip]

[tip]

Упражнение 7

Напишите консольную программу С++/CLI, которая использует перечисление для идентификации месяцев года значениями номеров месяцев от 1 до 12. Программа должна выдавать каждую константу перечисления и лежащее в основе значение.

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

Комната 1: 10,5 на 17,6 Комната 2: 12,7 на 18,9 Комната 3: 16,3 на 15,4

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

Показать »

Да как раз С++/CLI я не знаю с этой задачкой походу придется помучится.
Первая часть программы написать перечисление:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// test.cpp: главный файл проекта.
 
#include "stdafx.h"
 
using namespace System;
 
enum class Month{Jan=1,Feb,Mar,Apr,May,Jun,Jul,Agest,Sept,Okt,Nov,Des};
 
int main(array<System::String ^> ^args)
{
Console::WriteLine("Начало программы");
Month m=Month::Jan;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Feb;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Mar;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Apr;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::May;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Jun;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Jul;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Agest;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Sept;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Okt;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Nov;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
m=Month::Des;
Console::WriteLine("{0} - {1}",m,safe_cast<int>(m));
 
Console::ReadLine();
 
    return 0;
}

вывод:

QIP Shot - Screen 073

 

Ну что ж пытаемся решать следующую часть упражнения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// test.cpp: главный файл проекта.
 
#include "stdafx.h"
 
using namespace System;
 
int main(array<System::String ^> ^args)
{
Console::WriteLine("hellow world!");
Console::WriteLine("begin!");
double width=10.5;
double height=17.6;
double res=width*height;
Console::WriteLine("res= {0} after roudn {1}",res,Math::Round(res));
width=12.7;
height=18.9;
double res2=width*height;
Console::WriteLine("res={0} after res={1}",res2,Math::Round(res2));
width=16.3;
height=15.4;
double res3=width*height;
Console::WriteLine("res={0} after res={1}",res3,Math::Round(res3));
double sum=res+res2+res3;
Console::WriteLine("sum={0} after sum={1}",sum,Math::Round(sum));
double averige=sum/3;
Console::WriteLine("averige={0} after avarige {1}",averige,Math::Round(averige));
 
Console::ReadLine();
 
    return 0;
}

Вывод:
QIP Shot - Screen 074

[/tip]

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

[youtube]https://www.youtube.com/watch?v=P36PD-McxjQ[/youtube]

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (77)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant