Задачник и решебник, страница 21
Описание файла
PDF-файл из архива "Задачник и решебник", который расположен в категории "". Всё это находится в предмете "технология разработки программного обеспечения" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "технология разработки программного обеспечения" в общих файлах.
Просмотр PDF-файла онлайн
Текст 21 страницы из PDF
Решения219char fname[40]; // имя файла тестаFILE* f;// файл тестаint VsegoVopr = 0 ; // количество вопросов тестаint PravOtv = 0 ;// количество правильных ответов// для текущего вопросаint nOtv;// количество альтернативных ответовint Prav;// номер правильного ответаint Otv;// номер ответа, выбранного пользователемint р;// процент правильных ответовchar St[80];// строка файла тестаint i; // счетчик цикловif ( large ){puts("\nHe задан файл вопросов теста!");puts("Командная строка: test ИмяФайлаТестаХп");return;}strcpy{fname,argv[l]); // имя файла из командной строки// Открыть файл в режиме чтения (г) текста (t)if ((f = fopen(fnaine, "rt")) == NULL){printf("Ошибка открытия файла %s", fname);getch();retxim;}clrscr0;puts("ХпСейчас Вам будет предложен тест.");puts("К каждому вопросу дается несколько \вариантов ответа.");puts("Вы должны ввести номер правильного ответа");puts("и нажать клавишу <Enter>\n");printf220C/C+-i- в задачах и примерах("Для начала тестирования нажмите <Enter>");getch();textbackground(BLUE);clrscrО;while (!feof(f)){VsegoVopr++;fgets(st, 80, f);printf("\n%s\n", St);// читаем из файла вопрос// вопрос на экранfscanf(f,"%i %i", &nOtv, &Prav);// кол-во вариантов// ответа/ / и номер прав, ответаfgets(st,80,f); // дочитать конец предыдущей строки//читаем и выводим альтернативные ответыfor (1 = 1; 1 <= nOtv; l+-f){fgets (st, 80, f);printf("%1.
%s", 1, st);}printf("\пВаш выбор ->");scanf("%1", &Otv);if (Otv == Prav) PravOtv++;}// обработка результата тестирования// вычислим процент правильных ответовр = 100 * PravOtv / VsegoVopr;printf("\пВаша оценка - " ) ;if (р == 100) puts("ОТЛИЧНО!");if (р >= 99 && р <= 80) puts("ХОРОШО.");if (р >= 60 && р <= 7 9) puts("УДОВЛЕТВОРИТЕЛЬНО.");if (р < 60) puts("ПЛОХО!\п");puts("\nДля завершения нажмите <Enter>");getch();Часть II. Решения221Задача 245// Вьшодит имена всех файлов программ// предполагается, что первая строка// файла - комментарий, название программы#include <stdio.h>#include <dir.h>#include <string.h>#include <conio.h>// tdefine DEBUG// режим отладки/ / в качестве параметра программе передается// имя каталога, список файлов которого надо вывестиvoid main(int argc, char *argv[]){struct ffblk ffblk; // информация о файлеint done;FILE *in;// файл программыint n;// обработано файловchar mask[MAXPATH];char infile[MAXPATH];char outfile[MAXPATH];if (argc < 2){puts("B командной строке не задан путь");puts ("к обрабатываемым файлам");printf ("Командная строка: %s pathXWn", argv[0]);return;}printf("ХпПостроение списка файловХп");// маска обрабатываемых файловstrcpy(mask, argv[1]);strcat(mask,"*.cpp");// файл-список обработанных файлов222С/С-^-^ в задачах и примерахstrcpy(outfile, argv[l]);strcat(outfile,"filelist.txt");printf("Обработка: %s", mask);n = 0;done = findfirst(mask, &ffblk,0);while (!done){ n++;#ifdef DEBUGprintf("%s ", ffblk.ff_name);#endifstrcpy(infile, argv[1]);strcat(infile,ffblk.ff_name);if ((in = fopen(infile, "rt")) i= NULL){// читаем из файла первую строкуchar st[80];fgets(st, 80, in);printf("%s %s", infile, st);fclose(in);}done == findnext(&ffblk); // выбрать следующий файл}printf("ХпОбработано файлов: %d\n", n ) ;printf("Для завершения нажмите <Enter>");getch();}Задача 247// Рекурсивная функция "Факториал"#include "stdio.h"tinclude "conio.h"unsigned int factor (iinsigned int k){if ( к == 1 )return(1);elsereturn(k*factor(k-1));}Часть И.
Решения223v o i d main О{iinsigned i n t n; / / число, факториал которого надо/ /ВЬаГЧИСЛИТЬunsigned int f; // факториал числа пputs("Вычисление факториала\п");puts("Введите число, факториал которого надо вычислить");printf("->");scanf("%u", &n);f = factor(n);printf("Факториал числа %u равен %u", n, f);printf("\пДля завершения нажмите <Enter>");getch();}Задача 248// Рекурсивный узор из окружностейtinclude <graphics.h>#include <stdio.h>#include <conio.h>#include <dos.h>#define PATHTODRIVER "c: WborlandcWbgiW"// элемент узораvoid elem(int x, int y, int r, int p){// X, y, r — координаты и радиус центра// основного элемента узора// р — порядок узораif (Р){circle(х, у, г);delay(100);elem(x+r, у,г/2, р-1)elem(x,у-г, г/2, р-1)elem(x-r, у,г/2, р-1)224C/C-i-t- в задачах и примерахelem(x,у+г, г / 2 ,р-1);}}v o i d main (void)(int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();•if (errorcode == grOk){elem(320, 240, 60, 5); // рисуем узор 5-го порядкаouttext("Для завершения нажмите <Enter>");getch();closegraphО; // выход из графического режима}else{ргintf("Ошибка: %d\n", errorcode);puts("Для завершения нажмите <Enter>");getch();}Задача 249// Вычисляет сопротивление// п-звенной электрической цепи#include <stdio.h>#include <conio.h>float г1,г2,гЗ; // величины сопротивлений,//из которых состоит цепь// вычисляет сопротивление цепи п-го порядкаfloat гсер(int п){float г; // сопротивление цепи порядка п-1Часть II.
Решения225if (n == 1)return(rl + г2 + гЗ);else{г = rcep(n~l);return (rl + r2*r/(r2+r) + r3);}}void mainO{int n;float re;// количество звеньев (порядок) цепи// сопротивление цепиputs("ХпВычисление сопротивления электрической цепи");puts("Введите величины сопротивлений (Ом):");printf("rl ->");scanf("%f", &rl);printf("г2 ->");scanf("%f", &r2);printf("r3 ->");scanf("%f", &r3);printf("Порядок цепи ->");scanf("%i", &n);re = rcep(n); // величины сопротивлений передаются// функции rcep через глобальные// переменныеprintf("Сопротивление цепи:");if (ГС > 100){ГС /= 1000;printf("%5.2f кОм\п", ГС);}elseprintf("%5.2f Ом\п", re);puts("\nДля завершения нажмите <Enter>");getch();226С/С+-^- в задачах и примерахЗадача 250// Вычерчивает схему электрической цепи#include <graphics.h>#include <stdio.h>#include <conio.h>#define PATHTODRIVER "c: WborlandcWbgiW"// вычерчивает схему эл.
цепи от точки/ / с координатами х,уvoid drcep(int к, int х, int у){#define dx 7 // шаг сетки по X#define dy 7 // шаг сетки по Ysetcolor(GREEN);line(x,у,x+2*dx,у);rectangle(x+2*dx,y-dy,x+6*dx,y+dy);line(x+6*dx,y,x+8*dx,y);outtextxy(x+3*dx,y-3*dy,"Rl");setcolor(YELLOW);line(x+8*dx,y,x+8*dx,y+2*dy);rectangle(x+7*dx,y+2*dy,x+9*dx,y+6*dy);line(x+8*dx,y+6*dy,x+8*dx,y+8*dy);outtextxy(x+10*dx,y+2*dy,"R2");setcolor(LIGHTGRAY);line(x,y+8*dy,x+2*dx,y+8*dy);rectangle(x+2*dx,y+7*dy,x+6*dx,y+9*dy);line(x+6*dx,y+8*dy,x+8*dx,y+8*dy);outtextxy(x+3*dx,y+5*dy,"R3");if ( к > 1 ) drcep(k-l, x+8*dx, y ) ;}void main (void){int k; // порядок цепиint gdriver = DETECT; // драйверЧасть II. Решенияint gmode;int errorcode;227// режим// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode == grOk){printf("Введите порядок цепи -> " ) ;scanf("%i", &k);drcep(k, 10, 50);outtextxy(10,200,"Для завершения нажмите <Enter>");getch();closegraph0; // выход из графического режима}else{printf("Ошибка: %d\n", errorcode);puts("Для завершения нажмите <Enter>");getch();}}Задача 251// Кривая Гильберта#include <graphics.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include <math.h>tinclude <dos.h>#define PATHTODRIVER "c: WborlandcWbgiW"#define DT 3#define и 10// задержка при выводе линий по точкам// величина штриха кривой Гильбертаvoid Gilbert(int р); // вычерчивает кривую Гильберта228C/C++ в задачах и примерахvoid main (void){int gdriver = DETECT; // драйверint gmode;// режимint errorcode;// код ошибкиinitgraph(&gdriver, &gmode, PATHTODRIVER);errorcode = graphresult();if (errorcode == grOk) {outtextxy(10,10,"Кривая Гильберта .
. . " ) ;Gilbert(4);outtextxy(10,25,"Для завершения нажмите <Enter>");getch();closegraph();)else {printf("Ошибка: %d\n", errorcode);printf("\Для завершения программы нажмите <Enter>");getch();}}// Кривая Гильберта состоит из четырех элементов: а, Ь, e n d .// Каждый элемент строит соответствующая функция.void а(int i);void b(int i);void с(int i);void d(int i);void my_lineto(int x2, int у2); // вычерчивает по точкам// линиюvoid Gilbert(int p) // p - порядок кривой Гильберта{moveto(450,50);a(p) ;}// Элементы кривой.Часть II. Решенияvoid а ( i n t i){if( i > 0) {d(i-l); my_lineto(getx() - u, getyO);a(i-l); my_lineto(getx(), getyO + u) ;a(i-l); my lineto (getx () + u, getyO);b(i-l);}}void b(int i){if (i > 0){c(i-l); my_lineto(getx(),gety0 - u ) ;b{i-l); my_lineto(getx() + u, getyO);b(i-l); my_lineto(getx(),gety() + u ) ;a(i-l);}void с(int i){if (i > 0)b(i-l)/с(1-1);c(i-l);d(i-l);{my_lineto(getx() + u,gety());my__lineto(getx(), getyO - u) ;my_lineto(getx() - u^getyO);void ci(int 1 ){if (i > 0) {a(l--l); my__lineto(getx() ,gety 0 + u ) ;d(i-l); my_lineto(getx() - u,gety());d(i-l); my lineto(getx(),gety() - u ) ;c(i-l);229230C/C-f-^- в задачах и примерах// вычерчивает по точкам линиюvoid my_lineto(int х2, int у2){int х1,у1; // координаты начала прямой// х2, у2 — координаты концаint х,у;// координаты текущей точкиint dx;// приращение аргументаint dy;// приращение у при рисовании// вертикальной линииint color; // цвет линииint a,b;// коэф-ты уравнения прямойint п;// кол-во точекint i;xl = getx();yl = gety();if ( xl != x2 ){//не вертикальная линияa = (у2-у1)/(х2-х1);b == yl- a * xl;n = abs{x2-xl)+l;if (x2 > xl)dx = 1;else dx = -1;X = xl;color = getcolor();for (i = 1; i<= n; i++){у = a*x + b;putpixel(x,y,color);delay(DT);X += dx;}}else { // вертикальная линияn = abs(у2-у1);if (у2 > yl)dy = 1;else dy = -1;X = xl;Часть II.
РешенияУ = у1;color = getcolor();for (i = 1; i<=n; i++){putpixel(x, y, color);delay(DT);у += dy;}}putpixel(x2, у2, color);moveto(x2, у2);Задача 252// Кривая Серпинского#define u 5// Длина штриха, определяет величину кривой#define DT 25 // определяет скорость вычерчивания кривой#define PATHTODRIVER "с:\\borlandc\\bgi\\"#include#include#include#include<graphics.h><stdio.h><conio.h><inath.h>// кривая Серпинского состоит из четырех// элементов: а, Ъ,end/I каждый элемент строит соответствующая функцияvoid а(int i);void b(int i);void с(int i);void d(int i);// вычерчивает прямую из текущей точки в заданную// координаты конца задаются в приращениях#define linetodxy(dx,dy) lineto(getx()+dx,gety()+dy)void far lineto(int x2, int у2); // вычерчивает линию no// точкам// заменяет стандартную функцию, чтобы// процесс вычерчивания кривой Серпинского можно было видеть231232C/C++ в задачах и примерахI/ элементы кривойv o i d а ( i n t :L){if{(i > 0)a ( i - -1)b ( i - -1)d ( i - -1)a ( i - -1)linetodxy(u, u ) ;linetodxy(2*u,0);linetodxy(u, - u ) ;}void b(int i){if (i > 0){b(i-l);linetodxy(-u,u);c(i-l);linetodxy(0, 2*u);a(i-1);linetodxy(u,u);b(i-l);}void с(int i){if (i > 0){c(i-l);linetodxy(-u,-u);d(i-l);linetodxy(~2*u,0);b{i--l) ;linetodxy (-u,u) ;c(i-l);}void d(int i){if (i > 0){d(i-l);linetodxy(u,~u);a(i-l);linetodxy{0,-2*u);с (1-1);linetodxy(-U,-u);Часть II.