Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Нижегородский государственный
архитектурно строительный университет
Кафедра информационных систем
и технологий
Расчетно-графическая работа
по технологии программирования на языке С++.
Преподаватель Тарасов В.Л.
Студент гр. Ломакина Е.С. ИС 14
2007 г.
Оглавление
Задача 1 (№16)______________________________________________стр. 3
Задача 2 (№20)______________________________________________стр. 4
Задача 3 (№27)______________________________________________стр. 5
Задача 4 (№45)______________________________________________стр. 6
Задача 5 (№34)______________________________________________стр. 7
Задача 6 (№61)______________________________________________стр. 8
Задача 7 (№102)_____________________________________________стр. 9
Задача 8 (№123)_____________________________________________стр. 10
Задача 9 (№128)_____________________________________________стр. 11
Задача 10 (№64)______________________________________________стр. 12
Задача 11 (№121)_____________________________________________стр. 13
Задача 12 (№158)_____________________________________________стр. 14
Список литературы_________________________________________стр. 16
Задача №1(16)
Написать программу, подсчитывающую общую сумму процентных выплат по кредиту.
Алгоритм:
Мы вводим с клавиатуры сумму кредита (S), проценты (P) и количество месяцев (N). Затем присваиваем переменной x (ежемесячная сумма выплаты кредита) значение выражения, формула которого задана в программе и общую сумму процентных выплат находим по формуле: a = x s.
Программа:
#include <conio.h>
#include <iostream.h>
#include <math.h>
int main()
{
clrscr();
double s,p,n;
cout <<"Введите сумму кредита, проценты и количество месяцев: \n";
cin >>s>>p>>n;
double x,a;
x=(s*(pow(1+(p/1200),n))*(p/1200)/(pow(1+(p/1200),n)-1))*n;
a=x-s;
cout <<"Общая сумма процентных выплат = "<<a;
getch();
return 0;
}
Исполнение
Введите сумму кредита, проценты и количество месяцев:
100 10 5
a = 2,513831
Задача №2 (20)
Дано трехзначное число. Требуется проверить, делится ли оно на 3. Известно, что число делится на 3, если на 3 делится сумма его цифр.
Алгоритм:
Вводим с клавиатуры некоторое трехзначное число. Затем находим цифры этого числа путем нахождения остатка от деления этого числа на 10. Используем условный оператор if. Если остаток от деления суммы цифр числа на 3 равен 0, то выводим на экран «Делится», в противном случае «Не делится».
Программа:
#include <iostream.h>
#include <conio.h>
int main()
{
int n, // заданное число
ost, // остаток
sum;
clrscr();
int ed,des,sot;
cout << "Введите трехзначное число:\n"; // приглашение к вводу
cin >>n; // вводим n
ed=n%10; // находим 3 цифру
des=(n/10)%10; // находим 2 цифру
sot=n/100; // находим 1 цифру
ost=(ed+des+sot)%3;
if (ost==0) cout << "Делится \n";
else cout << "Не делится \n";
getch();
return 0;
}
Исполнение:
Введите трехзначное число:
123
Делится
Задача №3 (27)
Написать программу, печатающую таблицу значений функции
где x = 0.1, 0.2, … , 2.
Алгоритм:
В цикле for перебираем значения x и при данных значениях, находим значение р по вышеприведенной формуле.
Программа:
#include <iostream.h>
#include <conio.h>
#include <math.h>
int main()
{
clrscr();
double p,x;
cout << "p x \n";
for(x = 0.1; x < = 2; x + = 0.1){
p=1/(x*sqrt(2*4*tan(1)))*(exp((-1/2)*pow(log(x)-1,2)));
cout <<p<< " "<<x<< "\n" ;
}
getch();
return 0;
}
Исполнение:
p x
2,833047 0.1
1,416524 0.2
0,944349 0.3
0,708262 0.4
0,566609 0.5
0,472175 0.6
0,404721 0.7
0,354131 0.8
0,314783 0.9
0,283305 1
0,25755 1.1
0,236087 1.2
0,217927 1.3
0,202361 1.4
0,18887 1.5
0,177065 1.6
0,16665 1.7
0,157392 1.8
0,149108 1.9
Задача №4 (45)
Найти все целые корни уравнения , где b,c,d заданные целые числа, причем d 0.
Алгоритм:
Вводим коэффициенты уравнения. Известно, что целыми корнями уравнения могут быть только положительные и отрицательные делители коэффициента d. С помощью цикла for перебираем значения i.Если d делится без остатка на i, то i является делителем d, после этого находим y(i), если y(i)=0, то i корень уравнения.
Программа:
# include <iostream.h>
# include <conio.h>
int main()
{
clrscr();
int b,c,d; // вводимые коэффициенты
cout<< " Введите коэффициенты уравнения \n"; // приглашение к вводу
cin>>b>>c>>d; // вводим b,c,d
int i,y; // параметры цикла
for (i=1; i < = d; i++) { // перебираем i
if(d%i==0){
y=i*i*i+b*i*i+c*i+d;
if(y= =0)
cout<< " Корни уравнения: \n"<<i;
y=(-i)*(-i)*(-i)+b*(-i)*(-i)+c*(-i)+d;
if(y= =0)
cout<< " Корни уравнения: \n"<<-i;
if(y!=0)
cout<< "Корней нет: \n";
}
}
getch();
return 0;
}
Исполнение:
Введите коэффициенты уравнения:
1 2 3
Корней нет
Введите коэффициенты уравнения:
1 1 1
Корни уравнения: -1
Задача №5 (34)
Написать программу, печатающую таблицу чисел Фибоначчи, номера которых не превышают заданного значения n.
Алгоритм:
Вводим с клавиатуры n, затем с помощью цикла while подсчитываем числа Фибоначчи пока счетчик числа меньше n.
Программа:
#include <iostream.h>
#include <conio.h>
int main()
{
clrscr();
int n; // номер числа Фибоначчи
cout << " Введите n>0 \n";
cin >>n;
cout << "i fi \n";
int f0=1,f1=1,f2;
cout << 0<< " "<< 1 << endl; // печатаем 2 известных числа
cout << 1<< " "<< 1 << endl;
f2=f1+f0; // задаем формулу, для подсчета чисел
int i=2;
while (i<n){ //пока счетчик числа меньше n выводим на экран таблицу чисел Фибоначчи
cout << i<< " "<< f2 << endl;
f0=f1;
f1=f2;
f2=f1+f0; // подсчет числа
i++; // увеличение счетчика
}
getch();
return 0;
}
Исполнение:
Введите n>0
4
i fi
0 1
1 1
2 2
3 3
Задача №6 (61)
В заданном двумерном массиве (матрице) 4*4 найти максимальный элемент, его номер строки и номер столбца.
Алгоритм:
Предполагаем, что первое число максимально. Затем с помощью цикла for перебираем элементы матрицы. Если [x][y] элемент больше первого, значит он максимальный, следовательно, его номер строки x, а номер столбца y.
Программа:
#include <iostream.h>
#include <conio.h>
int main()
{
const int i=4;
const int j=4;
double r[i][j]={{150,9,7,6}, // двумерный массив
{8,3,6,3},
{12,2,13,14},
{11,4,10,15},
};
int xmax; // максимальный элемент
int nimax,njmax; // номер строки и номер столбца
nimax=0; // зануляем номер строки и столбца перед циклом
njmax=0;
xmax=r[0][0]; // предполагаем, что первое число максимально
int x,y; // параметры цикла
for(x=0; x < i; x ++) { // перебор элементов матрицы
for(y=0; y<j; y++) {
if(r[x][y]>xmax) {
xmax=r[x][y];
nimax=x;
njmax=y;
}
}
}
// вывод матрицы по строкам
cout<< " Дана матрица: \n";
for(x=0; x<4; x++){
for(y=0; y<4; y++)
cout<<r[x][y]<< " ";
cout<< "\n";
}
cout<< " \n Наибольший элемент матрицы: \n"<<xmax;
cout<< "\n Номер строки: \n"<<nimax;
cout<< "\n Номер столбца: \n"<<njmax;
getch();
return 0;
}
Исполнение:
Дана матрица:
150 9 7 6
8 3 6 3
12 2 13 14
11 4 10 15
Наибольший элемент матрицы: 150
Номер строки: 0
Номер столбца: 0
Задача №7 (102)
Написать программу, копирующую символы ввода и выходной поток с заменой символа табуляции на \t и каждой обратной наклонной черты на \\.
Алгоритм
Используем оператор switch для выбора одного из вариантов.
Программа
#include <iostream.h>
#include <conio.h>
int main()
{
char a;
while (!cin.eof()){ // пока не исчерпан входной поток
a=cin.get(); // читаем символы из потока
switch(a){ // используем оператор switch для выбора одного из вариантов
case ' ': cout <<"\t"; break;// если прочтенный символ равен то меняем его на \t
case '/': cout <<"\\"; break;
default: cout.put(a); // печать символа без изменений
}
}
getch();
return 0;
}
Исполнение
Вводим:
///
На экране:
\\\
Задача №8 (123)
Написать макрос, вычисляющий минимальное значение двух величин и программу с его использованием.
Алгоритм
minimum(a,b) макрос с параметрами, проверяющий больше ли первый аргумент второго. Если выражение a>b истинно, то печатаем, что b меньше a.
Программа
#include <iostream.h>
#include <conio.h>
#define minimum(a,b)((a)>(b)?(b):(a)) // макрос
void main()
{
clrscr();
int a,b; // 2 числа
cout<< "\n Введите a,b:\n"; // приглашение к вводу
cin>>a>>b; // вводим 2 числа
// вызываем функцию minimum
cout<< "Минимальное из"<<a<< “ и ”<<b<< “ = ”<<minimum(a,b); getch();
}
Исполнение
Введите a,b:
2 3
Минимальное из 2 и 3 = 2
Задача №9 (128)
Напишите функцию strend(char s, char t), которая выдает 1, если строка t расположена в конце строки s, и 0 в противном случае.
Алгоритм
С помощью цикла for перебираем последние элементы строк, если они совпадают, то возвращаем 1, иначе возвращаем 0.
Программа
#include<iostream.h>
#include<conio.h>
#include<string.h>
int strend(char s[],char t[])
{
clrscr();
int is,it; // последние элементы строк t и s
int ns=strlen(s); // длина строк
int nt=strlen(t);
if(nt > ns)
return 0;
for(is = ns-1, it = nt-1; it > = 0; it--, is--) // перебираем последние элементы
if(s[is]!=t[it]) // если последние элементы не совпадают
return 0; // возвращаем 0
return 1;
}
int main()
{
cout<< strend("abcdxyz","xyz");
getch();
return 0;
}
Исполнение
1
Задача №10 (64)
Напишите программу, меняющую местами столбцы s и k матрицы размером 4*4.
Алгоритм
Вводим с клавиатуры номера столбцов, которые нужно поменять местами. Затем с помощью цикла for перебираем элементы матрицы по строкам и меняем элементы r[i][k] и r[i][m] местами, используя промежуточную переменную tmp.
Программа
#include <iostream.h>
#include <conio.h>
int main()
{
int i;
int j;
double r[4][4]={{4,6,7,8},
{2,4,3,5},
{1,4,3,7},
{8,5,3,5},
};
//вывод исходной матрицы
cout<< " Дана матрица : \n";
for(i=0; i < 4; i++){
for(j=0; j < 4; j++)
cout<<r[i][j]<< " ";
cout<< "\n";
}
int m, k, tmp;
cout<< "\n Введите номера столбцов k,m: \n";
cin>> k >> m;
for(i=0; i<4; i++){
tmp=r[i][k]; // запоминаем элемент [i][k] матрицы r
r[i][k]=r[i][m]; //присваиваем элементу [i][k] значение элемента [i][m]
r[i][m]=tmp; //присваиваем элементу [i][m] значение переменной tmp
}
// печать конечной матрицы
cout<< "\n Матрица: \n";
for(i=0; i<4; i++){
for(j=0; j<4; j++)
cout<<r[i][j]<< " ";
cout<< "\n";
}
getch();
return 0;
}
Исполнение
Дана матрица
4 6 7 8
2 4 3 5
1 4 3 7
8 5 3 5
Введите k,m:
2 3
Матрица
4 6 8 7
2 4 5 3
1 4 7 3
8 5 5 3
Задача №11 (121)
Написать функцию escape(char s[], char t[]), копирующую строку t в s и преобразующую символы типа новая строка и табуляция в «видимые последовательности символов» типа \n и \t .
Алгоритм
С помощью оператора switch осуществляем замену символов.
Программа
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
void escape(char s[],char t[])
{
strcpy(s,t); // копируем строку t в s
for(int i=0, j=0; t[i]!='\0'; i++)
switch(t[i]){
// замена символов
case '\t': s[j++]='\\'; s[j++]='t';break;
case '\n': s[j++]='\\'; s[j++]='n';break;
default: s[j++]=t[i];
}
}
void main()
{
char s[500];
char t[500];
cout<< " Введите строку t \n";
cin.getline(t,500);escape(s,t);
cout<< " Конечная строка: \n"<< s;
getch();
}
Исполнение
Введите строку t
абвгде
Конечная строка
\tабвгде
Задача №12 (158)
Написать функцию, которая выводит на экран таблицу некоторой математической функции.
Алгоритм
Задаем число точек, затем находим расстояние между ними. Пока а увеличивается на это расстояние, находим значение функции в данных точках.
Программа
#include <iostream.h>
#include <conio.h>
#include <math.h>
double func(double (*f)(double),double a,double b,int n) // задаем функцию
{
double dx,fx;
int i=0; // счетчик цикла
dx=(b-a)/(n-1); // расстояние между точками
cout<< "a"<< " fx";
while((a+=dx) < =b){
fx=f(a);
cout<< "\n"<< a<< " "<<fx;
i++;
}
return 0;
}
void main()
{
clrscr();
cout<< " /n значения функции log(x) при 5< x <10:\n";
func(log,5,10,5); // вызов функции
getch();
}
Исполнение
Значения функции log(x):
а fx
6,25 1,832581
7,5 2,014903
8,75 2,169054
10 2,302585
Список литературы