Настоящий файл содержит пример выполнения контрольной работы по дисциплине «Основы программирования» для студентов заочной формы обучения ВПИ (филиал) ВолгГТУ по направлению 230100.62 «Информатика и вычислительная техника». Номер задания для выполнения необходимо взять у преподавателя или в списке, выложенном на сайте ЭУМКД по дисциплине по адресу www.volpi.ru/umkd/programming. Контрольная работа в первом семестре предполагает программную реализацию на языке Си 8 задач согласно полученному варианту задания. Решение каждой задачи должно содержать схему алгоритма решения задачи, листинг программы и, опционально, снимок экрана с результатами работы программы. К контрольной работе должен быть приложен лазерный диск с исходными текстами и скомпонованными программами решения задач. Условием зачета решения каждой задачи является успешный запуск и верное решение задачи программы. Кроме успешного запуска всех программ зачет по контрольной работе предполагает ее отчет преподавателю. На отчете студент дожен ответить на вопросы преподавателя по алгоритму и программной реализации предложенных решений. Министерство образования и науки Российской Федерации Волжский политехнический институт (филиал) федерального государственного бюджетного образовательного учреждения высшего образования «Волгоградский государственный технический университет» (ВПИ (филиал) ВолгГТУ) Вечерний факультет Факультет «_________________________________________________________» Информатика и технология программирования Кафедра «___________________________________________________________» КОНТРОЛЬНАЯ РАБОТА Основы программирования по дисциплине «_____________________________________________________» Решение задач с использованием различных типов данных языка Си на тему______________________________________________________________ вариант № ____________________________________________________________________ Сергей Петрович Иванов Студент_____________________________________________________________ ВВТ-175 Группа________________________ Оценка (имя, отчество, фамилия) ________________________ (зачтено/незачтено) Проверил ________________________ (подпись и дата подписания) _____________________ (долж., инициалы и фамилия) Нормоконтролер ______________________________ _____________________ (подпись, дата подписания) Волжский, 2015 г. (инициалы и фамилия) 1. По введенным с клавиатуры значениям длин сторон треугольника вычислить его площадь по А ВС формуле Герона: S = Р ( Р А) ( Р В) ( Р С ) , где Р= ; 2 Начало Ввод А,В,С Р=(A+B+C)/2; S р( р а)( р b)( p c) ; Вывод S Конец Рис. 2. Схема алгоритма решения задачи 2 #include <iostream> using namespace std; #include <math.h> #include <conio.h> double a, b, c, p, s; int main() { cout<<”Введите длины сторон треугольника”; cin>>a>>b>>c; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<”Площадь треугольника равна:”<<s; getch(); } 2. С клавиатуры вводятся координаты точки M(x,y). Определить, какой из областей (I, II или III) она принадлежит 2 I 1 2 1 III II 2 1 III Начало Ввод координат точки x,y 1 x2+y2<4 && x2+y2 >=1 && y>=0 0 Вывод «1-я область» 0 1 x2+y2<1 && && y>=0 Вывод «2-я область» Вывод «2-я область» Конец Рис. 2. Схема алгоритма решения задачи 2 #include <iostream> using namespace std; #include <conio.h> int main() { double x,y; cin>>x>>y; if (x*x+y*y<4 && x*x+y*y >=1 && y>=0) cout<<“ 1-я область”; else if (x*x+y*y <1 && y>=0) cout<<“ 2-я область”; else cout<<“ 3-я область”; getch(); } 3. Дана последовательность чисел. Определить количество чисел, две последних цифры которых кратны 3. Начало x!=0 Ввод числа x c=x%100 n=c/10 i=c%10 x/10!=0 n%3==0 i%3==0 m++ x!=0 Искомые числа: m Конец Рис. 3. Блок-схема алгоритма решения задачи 3 #include <conio.h> #include <math.h> #include <iostream> using namespace std; int main() { int x,c,n,i,m=0; clrscr(); do { cout<<"Vvedite chislo: "; cin>>x; c=x%100; n=c/10; i=c%10; if (x/10!=0) if ((n%3==0)&&(i%3==0)) m++; } while(x!=0); cout<<"Iskomye chisla: "<<m; getch(); } 4. В массиве целых чисел из n элементов перемножить элементы, лежащие между минимальным и максимальным. начало i=0; i<n Ввод m[i] i++ sum=0;imin=imax=0; i=1; i<=n m[i]<m[imin] да imin=i нет m[i]>m[imax] да imax=i нет i++ да нет imin<imax k=imin k=imax да нет imin>imax l=imin l=imax i=k+1; i<l sum+=m[i] i++ Вывод sum начало Рис. 4. Блок-схема алгоритма решения задачи 4 #include <iostream> using namespace std; int main() { const int n=10; int i,k,l; float m[n]; for(i=0;i<n;i++) cin>>m[i]; float sum=0,t; int imin,imax; imin=imax=0; for(i=l;i<n;i++) { if (m[i]<m[imin]) imin=i; if (m[i]>m[imax]) imax=i; } k=imin<imax?imin:imax; l=imin>imax?imin:imax; for(i=k+1;i<l;i++) sum+=m[i]; cout<<sum; } 5. Подсчитать в матрице целых чисел nxn количество столбцов, содержащих нулевые элементы. Определить, в какой строке наибольшее количество 0. #include <iostream> using namespace std; #include <conio.h> int main() { const int n=4; int mas[n][n],i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>mas[i][j]; int s=0,imax,max; for(i=0;i<n;i++) for(j=0;j<n;j++) if (mas[j][i]==0) {s++;break;} cout<<s; max=0; imax=0; for(j=0;j<n;j++) if (mas[0][j]==0) max++; for(i=1;i<n;i++) { s=0; for(j=0;j<n;j++) if (mas[i][j]==0) s++; if (s>max) {max=s; imax=i; } } cout<<,imax); getch(); } начало Ввод матрицы nxn s=0 i=0; i<n j=0; j<n да mas[j][i]=0 нет s++ j++ i++ Вывод s imax=0;max=0 j=0; j<n да mas[0][j]=0 max++ нет j++ i=1; i<n s=0 j=0; j<n да mas[i][j]=0 нет s++ j++ s>max нет max=s; imax=i i++ Вывод imax начало Рис. 5. Блок-схема алгоритма решения задачи 5 6. С клавиатуры вводятся две строки. Определить, сколько раз вторая строка входит в первую начало Ввод строки 1 (str) Ввод строки 2 (str1) bFind=1, Count=0 tmp=str нет bFind=1 да tmp=strstr(str,str1) да нет tmp≠0 Count++ bFind=0 tmp++ Вывод Count конец Рис.6. Блок-схема алгоритма решения задачи 6 #include <iostream> using namespace std; #include <stdio.h> #include <conio.h> #include <string.h> int main() { char str[1000],str1[100],*tmp; SetConsoleCP(1251); SetConsoleOutputCP(1251); int Count=0, bFind=1; clrscr(); puts("Введите 1-ю строку\n"); gets(str); puts("Введите 2-ю строку\n"); gets(str1); Count=0; tmp=str; //указатель tmp пробегает по всем символам строки str while(bFind) //пока есть вхождения str2 в str { tmp=strstr(tmp, str1); //ищем очередное вхождение if(tmp) { Count++; tmp++; //следующее вхождение ищем за уже найденным } else bFind=0; //не найдено совпадений – завершаем цикл } cout<<Count; getch(); return 0; 7. Найти все простые делители целого числа n начало Ввод n i=1; i<=n нет n%i=0 да flag=1 j=2; j<√i да i%j=0 flag=0 нет j++ да flag=1 нет Вывод i i++ начало Рис.7. Блок-схема алгоритма решения задачи 7 #include <iostream> using namespace std; #include <conio.h> int main() { unsigned int i,j,n,flag; cin>>n; for (i=1;i<=n;i++) if (n%i==0) { flag=1; for(j=2;j<i;j++) if (i%j==0) {flag=0; break; } if (flag) cout<<i<<'\n'; } getch(); } 8. Найти минимум функции ax2+bx+c на интервале [-5;5] с шагом аргумента 0.1. начало Ввод a, b, c fmin=a*25-b*5+c xmin=-5; x=-5 нет x<=5 да f=a*x*x+b*x+c f<fmin нет да fmin=f xmin=x; x+=0.1 Вывод fmin, xmin начало Рис.8. Блок-схема алгоритма решения задачи 8 #include <iostream> using namespace std; #include <conio.h> int main() { float a,b,c,x,xmin,fmin,f; cin>>a>>b>>c; fmin=a*25-b*5+c; for (x=-5;x<=5;x+=0.1) { f=a*x*x+b*x+c; if (f<fmin) {fmin=f; xmin=x; } } cout<<fmin<<"\t"<<xmin; getch(); }