Задача за програмиране 10 Програмно осигуряване на съвремените компютри (обобщение) 13 Системи за програмиране 15



страница5/12
Дата21.11.2017
Размер1.86 Mb.
#35102
ТипЗадача
1   2   3   4   5   6   7   8   9   ...   12

Оператор 1

Оператор 2

Състояние на екрана

cout<<13<<4.57;


cout<<13;

cout<<4.57;



134.57

cout<<13<


cout<<13<cout<<4.57;



13

4.57


cout<<13<

cout<<4.57;


cout<<13<< “\n”;

cout<<4.57;



13

4.57


cout<


cout<cout<


7.28

cout<


cout<cout<


7.2

8

cout<


15.2

cout<<”Мая Тодорова Георгиева”;


Мая Тодорова Георгиева

cout<<”Мая\n Тодорова\n Георгиева\n”


Мая

Тодорова


Георгиева


cout<<”Мая”<

cout<<”Тодорова”<
cout<<”Георгиева”<;




  1. Използване на cin и cout за “дружелюбно” поведение на програма на С++

Задача: Да се състави програма AVERAGE.cpp, която въвежда от клавиатурата две числа a и b и извежда на екрана тяхното средно аритметично.

Р

Състояние на екрана
ешение:

#include



void main()

{
a=7

b=8

Ср. аритметично е: 7.5




float a,b;

cout<<”a=”; cin>>a;

cout<<”b=”; cin>>b;

float c=a+b;

cout<<”Ср. аритметично е: “<

}




Редовете от програмата cout<<”a=”;cin>>a;

cout<<”b=”;cin>>b;
наричаме “дружелюбен вход”. Въвеждането на данни, предхождано от подобен род съобщения ни помага да се ориентираме за променливите, на които задаваме стойности.



  1. Решени задачи

  1. Задачи за изчисление.

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

Задача 1. Ограда.

В едно училище направили кръгли градинки, в които красиво посадили цветя. За съжаление все се намирали недобросъвестни ученици, които влизали в градинките и тъпчели цветята. Ето защо, от ръководството на училището решили да оградят градинките с ограда от телена мрежа. Училищният градинар, който точно знаел радиусите на всички градинки, трябвало да изчисли колко дълга мрежа е необходима за ограждането на всяка една от тях. Той не бил добре с математиката, а и трябвало бързо да смята. Помогнете на градинаря, като напишете програма OGRADA.CPP, която въвежда от клавиатурата радиуса на една градинка (реално число) и извежда на екрана дължината на мрежата, която трябва да се закупи, за да се огради градинката.



Примерен вход

1

Примерен изход

6.28

Решение

Тъй като градинката е кръгла, то за да се намери дължината на мрежата, трябва да се намери дължината на окръжността с дадения радиус.



    1. Ще определим величините, които участват в програмата:

  • това са две дробни променливи r и c, съответно за радиуса и за дължината на окръжността. Те се декларират по следния начин:

float r,c;

  • необходима е и дробната константа pi, която има за стойност числото и се декларира по следния начин:

const float pi=3.14;

cin>>r;

    1. Когато вече знаем радиуса, можем да пресметнем дължината на окръжността по математическата формула

c=2r,

която на езика С++ се записва чрез следната операция за присвояване:

c=2*pi*r;


    1. Щом пресметнем дължината на окръжността, можем да я изведем на екрана:

cout<

Като използваме описаното решение и правилата за писане на програма на езика С++, можем да напишем следната програма:

//ograda.cpp

#include



void main()

{

const float pi=3.14;



float r,c;

cin>>r;


c=2*pi*r;

cout<

}

Тази програма вече може да бъде въведена чрез системата за програмиране BorlandC, да бъде съхранена под име OGRADA.CPP и да бъде изпълнена.



Задача 2. Боя.

Налага се да се боядиса провоъгълна стена с дължина l и височина h. Известно е, че с една кутия боя могат да се боядисат m квадратни единици площ от стената. Напишете програма BOJA.CPP, която прочита от клавиатурата дробните числа l, h и m, и отпечатва колко кутии боя са необходими, за да се боядиса стената.



Примерен вход

2 4 5


Примерен изход

2

Решение



  1. Необходими величини:

  • за дължината и височината на стената, и количеството боядисана площ от една кутия боя са необходими три дробни променливи:

float l, h, m;

  • за броя кутии, обаче, ще ни трябва цяла променлива, защото брой винаги се задава с цяло число. При това броя кутии боя никога не може да е отрицателен и затова ще използваме целочислен тип, който няма отрицателни числа.

unsigned b;

  1. Въвеждат се променливите l, h и m:

cin>>l>>h>>m;

За да стане по-ясно на потребителя какво точно трябва да въвежда, може да реализираме дружелюбен вход по следния начин:

cout<<”Дължина: “; cin>>l;

cout<<”Височина: “; cin>>h;

cout<<”площ в кв. м., която се боядисва с една кутия: “; cin>>m;


  1. Пресмята се лицето на стената:

Тук става ясно, че е необходима още една дробна променлива, в която ще се запише стойността на лицето на стената. Да я означим с s. Тя може да се декларира в момента, в който ни потрябва:

float s=l*h;

  1. Пресмята се броя кутии с боя:

Най-лесно е просто да разделим лицето на площта, която се боядисва с една кутия боя, но резултатът, получен в този случай няма да е винаги точен. Всъщност, той ще е точен само в случаите, когато s се дели на m без остатък, а те явно са много малка част от общия брой случаи. Естествено, ако се получи дробно число като резултат, то задължително трябва да се закръгли към по-голямият брой кутии, защото и за най-малката останала част от стената ще се наложи да се купи още една кутия боя. Закръглянето се извършва със специалната функция ceil, която е описана в специализираната библиотека math.h. Функцията ceil приема като параметър реално число и връща най-малкото цяво число надвишаващо параметъра.

Сега можем да запишем операцията за присвояване, с помощта на която ще присвоим на променливата b броя на кутиите боя, необходими за боядисване на стената.

b=ceil(s/m);


  1. След като търсеният брой е пресметнат, той трябва да бъде изведен на екрана:

cout<

Окончателно програмата има следния вид:

// boja.cpp

#include

#include

void main()

{

float l, h, m;



unsigned b;

cout<<”Дължина: “; cin>>l;

cout<<”Височина: “; cin>>h;

cout<<”площ в кв. м., която се боядисва с една кутия: “; cin>>m;


float s=l*h;

b=ceil(s/m);

cout<

}

Задача 3. Разстояние от точка до центъра на координатната система

Да се състави програма DIST.CPP, която въвежда от клавиатурата координати на точка в равнината и изчислява разстоянието от точката до центъра на координатната система.

Примерен вход

4 3


Примерен изход

5

Решение



  1. Необходими величини:

    Трябва да декларираме три дробни числа – по едно за координатите на точката и едно за разстоянието от нея до центъра на координатната система:

    float x,y,d;

  1. Първо трябва да се въведат координатите на точката:

cin>>x>>y;

  1. След това се изчислява разстоянието от точката до центъра на координатната система:

r=sqrt(x*x+y*y);

  1. В края на програмата намереното разстояние се извежда на екрана:

cout<Тук трябва да отбележим нещо важно: тъй като използваме функцията sqrt, не трябва да забравяме да включим към програмата математическата библиотека math.h.

Окончателно програмата има следния вид:

// dist.cpp

#include

#include



void main()

{

float x,y,d;



cin>>x>>y;

float r=sqrt(x*x+y*y);

cout<

}


  1. Отделяне на цифрите на число

В много случаи се налага, ако имаме дадено число да отделим цифрите му. Например ако искаме да проверим дали дадено число се дели на 3 или на 9, ние намираме сумата от цифрите му. Понякога се налага да ръзменим цифрите на едно число или да го прочетем наобратно. Да си припомним и играта “Бикове и крави”, където също се налага да се отделят цифрите на числото. Има много други примери, при които се налага да се отделят цифрите на едно число.

Задача 4. Сума от цифри на число

Дадено е трицифрено число k. Да се състави програма SUMCIF.CPP, която прочита от клавиатурата числото k и отпечатва сумата от цифрите му.



Примерен вход

365


Примерен изход

14

Решение

За да намерим сумата от цифрите на числото, трябва да намерим поотделно всяка една от тях – цифрата на единиците, на десетиците и на стотиците.


  1. Необходими величини:

    Освен цялото число k се налага да заделим по едно цяло число за всяка една от цифрите:

int k,e,d,s; // е – цифрата на единиците, d – на десетиците и s – на стотиците.

  1. Първо трябва да се въведе числото к:

cin>>k;

  1. След това трябва да се изчислят съответните цифри като използваме целочислените операции за деление по следния начин:

e=k%10;

d=k/10%10;

s=k/100;


  1. Накрая, чрез оператора за изход извеждаме сумата на цифрите на числото:

cout<

В този случай програмата е следната:

//sumcif.cpp

#include



void main()

{

int k,e,d,s;

cin>>k;

e=k%10;


d=k/10%10;

s=k/100%10;

cout<

}

Допълнителна задача:

Коригирайте програмата така, че да работи за четирицифрено число. Проверете и резултата, при въведено двуцифрено число. Защо програмата връща правилен резултат при двуцифрено число и грешен при петцифрено?

Задача 4. Намиране на обърнато число на дадено

Да се състави програма OBRATNO.CPP която прочита от клавиатурата трицифрено число N и отпечатва обърнатото му.



Примерен вход

365


Примерен изход

563


Решение

За да намерим обратното на числото, трябва да намерим поотделно всяка една от цифрите му – цифрата на единиците, на десетиците и на стотиците.



    1. Необходими величини:

    Освен цялото число N се налага да заделим по едно цяло число за всяка една от цифрите:

int N,e,d,s,oN; // е – цифрата на единиците, d – на десетиците и s – на стотиците, ок- обратното на числото к.

    1. Първо трябва да се въведе числото N:

cin>>N;

3. След това трябва да се изчислят съответните цифри, като използваме целочислените операции за деление по следния начин:

e=N%10;

d=N/10%10;



s=N/100;

4. Когато знаем цифрите на числото, можем да намерим обратното му по следната формула:

оN=100*e+10*d+s;


  1. Накрая извеждаме намереното обратно число.

След този анализ напишете програмата самостоятелно.

Допълнителна задача:

Коригирайте програмата така, че да работи за четирицифрено и петцифрено число. Проверете и резултата, при въведено двуцифрено число.



  1. Преобразуване на мерни единици

Превръщането от грамове в килограми, от километри в метри става с по-малко пресмятания, защото се налага деление на 10, но превръщането от секунди в минути и в часове и обратно изисква по-сериозни пресмятания. Ето няколко задачи, в които се поставят и решават подобни проблеми.

Задача 5. Склад

За нуждите на един склад трябва да се направи програма SKLAD.CPP за пресмятане на складовите наличности. Програмата трябва да прочита от клавиатурата количеството стока в килограми и грамове, както и продаденото количество, измерено по същия начин, и да отпечатва оставащото количество стока. Програмата приема като вход четири числа, първото от които е килограмите на наличното количество, второто е грамовете; третото число е килограмите на продаденото количество, а четвъртото – грамовете на продаденото количество. Програмата отпечатва 2 числа – първото е килограмите на оставащото количество, а второто – грамовете. Складът е толкова голям, че в него не може да се съхранява повече от 10 тона стока.



Примерен вход

1000 200 50 700



Примерен изход

949kg 500g



Решение

Най-лесно можем да решим задачата като в началото преобразуваме всички мерни единици в грамове, извършваме изваждането на продаденото количество от наличното, след което преобразуваме оставащото количество в килограми и грамове. При това ще са необходими поне 6 променливи – по две за всяко количество – налично, продадено, оставащо.



  1. Необходими величини:

Тук трябва добре да обмислим какъв ще е типът на променливите, с които ще работим. От условието се вижда, че най-голямото количество стока, която може да се съхрани в склада е 10 тона, което ако се превърне в грамове е 10 000 000 грама. Това число очевидно не може да се събере нито в тип int, нито в unsigned. Все пак е необходимо да ползваме целочислен тип, защото за окончателното преобразуване на грамовете на оставащото количество в килограми ще ни трябва операцията за целочислено деление. Целочислен тип, който може да тозволи използването на толкова големи числа е unsigned long. Ето защо дефинираме следните величини:

unsigned long nk, ng, pk, pg, ok, og;

където nk са наличните килограми, ng – наличните грамове, pk – килограмите на продаденото количество, pg – грамовете на продаденото количество, ok – килограмите на оставащото количество, og - грамовете на оставащото количество.



  1. Въвеждаме входните данни:

cin>>nk>>ng>>pk>>pg;

  1. Преобразуваме наличното и продаденото количество в грамове:

ng=nk*1000+ng;

pg=pk*1000+pg;



  1. Пресмятаме оставащото количество в грамове:

og=ng-pg;

  1. Превръщаме оставащото количество в грамове и килиграми:

ok=og/1000;

og=og%1000;



  1. Извеждаме килограмите и грамовете на оставащото количество.

cout<Програмата, решаваща тази задача има следния вид:

//sklad.cpp

#include



void main()

{

unsigned long nk, ng, pk, pg, ok, og;

cin>>nk>>ng>>pk>>pg;

ng=nk*1000+ng;

pg=pk*1000+pg;

og=ng-pg;

ok=og/1000;

og=og%1000;

cout<< ok<<” kg “<

}

Задача 6. Самолет

Известно е, че един самолет излита в h часа и m минути, като полетът му продължава m1 минути. Да се състави програма AIR.CPP, която прочита от клавиатурата данните h, m и m1 за полета и отпечатва в часове и минути точното време на кацането му. Например: самолетът излита в 23 часа и 50 минути, полетът продължава 75 минути, следователно часът на кацане е 1 часа и 5 минути.

Примерен вход

23 50 75


Примерен изход

1h 5m


Решение

Задачата се решава като предходната, като към минутите на излитане се добавят минутите на продължителността на полета. След това получения резултат се преобразува в часове и минути, като часовете се прибавят към часа на излитане. Остава само да съобразим, че има възможност да се премине в следващото денонощие и тогава часа на кацане ще се ролучи като вземем остатъка при деление на получения час на 24.



  1. Необходими величини:

Можем да решим задачата само с помощта на трите променливи обявени в условието, като ще се уговорим в променливите, указващи времето на излитане да получим времето на кацане.

unsigned h,m,ml;

  1. Въвеждаме входните данни:

cin>>h>>m>>ml;

  1. Прибавяме минутите на продължителността на полета към минутите на излитане:

m+=ml;

  1. Преобразуваме получените минути в часове и минути, като часовете прибавяме към часа на излитане, а минутите записваме в променливата m:

h+=m/60;

m%=60;


  1. Пресмятаме часа на кацане, като остатък при деление на 24 за да избегнем грешката при прехвърляне в другото денонощие:

h%=24;

  1. Отпечатваме часа на кацане:

cout<
Каталог: tadmin -> upload -> storage
storage -> Литература на факта. Аналитизъм. Интерпретативни стратегии. Въпроси и задачи
storage -> Лекция №2 Същност на цифровите изображения Въпрос. Основни положения от теория на сигналите
storage -> Лекция 5 система за вторична радиолокация
storage -> Толерантност и етничност в медийния дискурс
storage -> Ethnicity and tolerance in media discourse revisited Desislava St. Cheshmedzhieva-Stoycheva abstract
storage -> Тест №1 Отбележете невярното твърдение за подчертаните думи
storage -> Лекции по Въведение в статистиката
storage -> Търсене на живот във вселената увод
storage -> Еп. Константинови четения – 2010 г някои аспекти на концептуализация на богатството в руски и турски език


Сподели с приятели:
1   2   3   4   5   6   7   8   9   ...   12




©obuch.info 2024
отнасят до администрацията

    Начална страница