Задачник и решебник (1087980), страница 17
Текст из файла (страница 17)
Решения163puts("\nДля завершения работы нажмите <Enter>");getch();}Задача 192// Функция вычисляет доход по вкладуfloat dohod(float sum,// сумма вкладаfloat stavka, // процентная ставка (годовых)int srok)// срок вклада (дней){return(sum*(stavka/100/365)*srok); // 365 кол-во дней в/ / году}Задача 193// Функция проверяет, является ли символ гласной буквойint glasn(char ch){static char gl[] ="АаЕеИиОоУуЫыЭэЮюЯя\0";int i = 0;while (gl[i] && gl[i] != ch)i++;if ( gl[i] )return(1);else return(0);Задача 195// Функция upcase#include "stdio.h"#include "conio.h"// функция преобразования строчных букв в прописныеchar* upcase (chau: *st){int i = 0;while ( st[i] )164C/C-i-f- в задачах и примерах{if (st[i] >= 'а' && st[i] <= 'z' ||// латинскиеst[i] >= *а' && st[i] <= 'п') // русскиеst[i] -= 32;else if (st[i] >= 'p' && st[i] <= 'яМst[i] -= 80;i++;}return St;}// пример использования функции upcasevoid main(){char St [80];puts("Введите строку текста и нажмите <Enter>");printf("->");gets(St);puts(upcase(st));puts("\nДля завершения нажмите <Enter>");getch();}Задача 196// Функция решения квадратного уравнения#include "stdio.h"tinclude "conio.h"#include "math.h"int kvadur(float a, float b, float c, // коэф-ты уравненияfloat *xl, float *x2)// корни уравнения// значение функции - количество корней// или -1, если неверные исходные данные{float d; // дискриминантЧасть 11.
Решенияif (а == 0) retum(-l);d = b*b-4*a*c;if (d < 0)return(0);// уравнение не имеет решения*х1 = (-b+sqrt(d))/(2*а);*х2 = (-b-sqrt(d))/(2*a);i f (*х1 !- *х2) retum(2);e l s e retxim (1) ;}// проверка работоспособности функцииvoid main О{float a,b,с; // коэффициенты уравненияfloat х1,х2; // корни уравненияint п;// кол-во корнейputs("\пРешение квадратного уравнения");puts("Введите в одной строке коэффициенты и нажмите\<Enter>");printf("->");scanf("%f%f%f", &a, &b, &c);switch (kvadur(a,b,c,&xl, &x2)){case -1: puts("Ошибка исходных данных.");break;case 0: puts("Уравнение не имеет решения.");break;case 1: printf("Корни одинаковые: x=%3.2f", xl);breaJc;case 2:printf("xl=%3.2f x2=%3.2f", xl, x2);}puts("\nДля завершения работы нажмите <Enter>");getch();165^166C/C+'f- в задачах и примерахЗадача 197// Функция starline выводит строку из звездочек#include "stdio.h"#include "conio.h"// выводит строку из звездочекvoid starline{int len){for (int i = 0; i < len; i++)putch('* M ;}void main()(starline(10);puts("\nДля завершения работы нажмите <Enter>");getch();}Задача 200// Функция frame вычерчивает рамку#include "stdio.h"#include "conio.h"// вычерчивает рамкуvoid frame(int 1, int t, int w, int h){// l,t - координаты верхнего левого угла,// vif h - ширина и высота рамкиint х,у; // координаты выводимого символаint i;// символы, из которых составляется рамкаchar с1 == 218, // левый верхний уголс2 = 196, // горизонтальная линиясЗ = 191, // правый верхний уголс4 = 179, // вертикальная линияс5 = 192, // левый нижний уголев - 217; // правый нижний уголЧасть II.
Решения167gotoxy(l,t);putch(cl);for (i = 0; i < w-2; i++) // символы верхней границы// рамкиputch(с2);putch(c3);у = t+1;X = 1+w-l;for (i = 0; i < h-1; i++) //символы левой и правой границ{gotoxy(l,y);putch(с4);gotoxy(х,у);putch(с4);У++;}gotoxy(1,у);putch(с5);for (i = 0; i < w-2; i++) // символы нижней границыputch(c2);putch(c6);}void main (){clrscr();frame(5,5,30,10);puts("\nДпя завершения нажмите <Enter>");getch();}Задача 201// Функция getint#include "stdio.h"#include "conio.h"#include "stdlib.h"// Функция getint предназначена для ввода целого// положительного числа, состоящего из одной или двух цифр.//Во время ввода, для редактирования, может использоваться// клавиша <Backspace>.168C/C-i'+ в задачах и примерах// при нажатии <Enter> функция возвращает// введенное число.#define К_ВАСК 8// код клавиши <Backspace>#define K_ENTER 13 // код клавиши <Enter>#define НВ4// допустимое количество цифрint getint(){char ch;// текущий символchar buf[HB]; // введенные цифрыint n = 0;// кол-во введенных цифрbuf[0] = 40»;w h i l e ((ch = g e t c h O ) != K_ENTER)i f (ch >= ' 0 ' && ch <= 'Э^б^; n < HB){putch(ch);buf[n++] = ch;}e l s e i f (ch == K_BACK && n){printf("\b \b");n—;}i f (n){buf[n] = '\0';return(atoi(buf));}else retum(-l);void main () {int a; // введенное числоputs("ХпДемонстрация работы функции getintXn");puts("Функция getint предназначена для ввода");puts("целого положительного числа.");puts("Во время ввода, для редактирования, может");puts("использоваться клавиша <Backspace>");Часть II.
Решенияputs("При нажатии <Enter> функция возвращает");puts("введенное число или -1, если число не введено.");puts("Введите число и нажмите <Enter>");print£("->");if (а = getintO )printf("\nBbi ввели число %d", а ) ;else puts("Число не введено.");puts("\nДля завершения нажмите <Enter>");getch();}Задача 202// Функции getfloat и pos#include <stdio.h>#include <conio.h>#include <stdlib.h>#define PATHTODRIVER "c: WborlandcWbgiW"// возвращает позицию символа в строкеint pos(char* st, char c){int i = 0;while ( st[i] != с && st[i] )i++;if ( st[i] )return(i+1);elsereturn(0);}// вводит дробное числоfloat getfloat О{#define N 10 // кол-во символов, включая точку и минусchar ch;char buf[N+1];int i;1690/0+-^ в задачах и примерах170for (i = 0; i < N+1; i++)buf[i++] ='\0';i = 0;do {ch=getch();if (ch >= '0' && ch <= '9' && i < 8) {putch(ch);buf[i++] = ch;}elseswitch (ch) {case '-" : if (!i){putch(ch);buf[i++] = ch;}bresJc;if ( !(pos(buf,'.'))){putch(ch);buf[i++] = ch;}break;if (i)printf("\b \b");buf[—i] = 40»;}} while (ch != 13)<return(atof(buf));}void main (void){float f;printf("Введите дробное число - > " ) ;f = getfloatO ;printf("ХпВведено число %e\n", f);getch();Часть 11.
Решения171Задача 203// Игра "21"#include "stdio.h"tinclude "conio.h"#include "stdlib.h" // функция randiinclude "time.h"// функция timeint koloda[12];int kartaO;void main (){int igrok = 0 ;int comp = 0 ;char otv;time_t t;// колода карт// функция "выдает" карту из колоды// очки игрока// очки компьютера// ответ игрока// создадим колодуfor (int i=2; i <=11; i++)koloda[i] = 4;koloda[5] = 0 ; // "пятерок" в колоде нет// инициализация генератора случайных чиселsrand((unsigned)time(&t))/printf("\пИгра в карты до хорошего не доведет!\п");do {// карта игрокуigrok += karta();// карта компьютеруif (igrok < 21)comp += karta();if (igrok < 21 && comp < 21){printf("У вас %d\n",igrok);printf("Еще карточку? (введите у или п) " ) ;otv = getchar();172C/C-i-'i' в задачах и примерах// Игрок нажимает две клавиши: с буквой и <Enter>// предыдущий вызов getchar читает букву.// При этом в буфере клавиатуры остается код// клавиши <Enter>.
Прочитаем его.int b;b = getchar();}} while (igrok <= 21 && comp <= 21 && otv != 'nM ;if (igrok = = 2 1 || (igrok < 21 && igrok > comp)I I comp > 21)printf("Bы выиграли!\n");elseprintf("Вы проиграли!\n");printf ("У вас %d\n", igrok);printf ("У компьютера %d\n", comp);printf("Для завершения нажмите <Enter>");getch();}// выдает карту из колодыint karta(){int i;doi = randO % 10 +2;while (koloda[i] == 0);koloda[i]—;return i ;Задача 205/ / Рисует олимпийский флаг#include <graphics.h>#include < s t d l i b . h >t i n c l u d e <stdio.h>#include <conio.h>Часть IL Решения173# d e f i n e PATHTODRIVER " с : W b o r l a n d c W b g i W "v o i d main (void){int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode != grOk)// ошибка инициализации// графического режима{printf("Ошибка: %d\n", errorcode);puts("Для завершения программы нажмите <Enter>");getch();exit(l);}// полотнище флага - сплошная заливка серым цветомsetfillstyle(SOLID_FILL,LIGHTGRAY); //bar(80,80,200,135);// кольцаsetcolor(GREEN);circle(100,100,15);setcolor (BLACK");circle(140,100,15);setcolor(RED);circle(180,100,15);setcolor(YELLOW);circle(120,115,15);setcolor(BLUE);circle(160,115,15);// зеленое// черное// красное// желтое// синееgetch();closegraph0; // выход из графического режима174C/C++ в задачах и примерахЗадача 208// Выводит корабль (с использованием метода базовой точки)#include <graphics.h>tinclude <stdlib.h>iinclude <stdio.h>tinclude <conio.h>#define dx#define dy1010// шаг сетки по X// шаг сетки по Yvoid ship(int x, int y) // x, у - координаты базовой точки{// корпусmoveto(х^у);lineto(х,y-2*dy);lineto(x+10*dx,y-2*dy);lineto(x+ll*dx,y~3*dy);lineto(x+17*dx,y-3*dy);lineto(x+14*dx,y);lineto(x,y);// надстройкаmoveto(x+3*dx,y-2*dy);lineto(x+4*dx,y-3*dy);lineto(x+4*dx,y~4*dy);lineto(x+13*dx,y-4*dy);lineto(x+13*dx,y-3*dy);line(x+5*dx,y~3*dy,x+9*dx,y-3*dy);// капитанский мостикrectangle (x-i-8*dx, y-4*dy, x+ll*dx, y-5*dy) ;// трубаrectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);// иллкминаторыcircle {x+12*dx,y'-2*dy,dx/2) ;circle(x+14*dx,y-2*dy,dx/2);// мачтаline(x+10*dx,y-5*dy,x+10*dx,y-10*dy);// оснасткаmoveto(x+17*dx,y-3*dy);lineto(x+10*dx,y-10*dy);lineto (x, y-'2*dy) ;}Часть II.