- •1. Рабочая программа курса “методы программирования ”
- •Литература
- •2. Разветвляющиеся алгоритмы.
- •Циклические алгоритмы
- •Одномерные массивы (векторы)
- •Функции с одним результатом
- •Функции типа void.
- •7. Введение в объектно-ориентированное программирование
- •8. Простые типы данных
- •9. Матрицы (двухмерные массивы)
- •Сборник задач по программированию
- •Учебно-методическое пособие для студентов специальностей g 31 03 01 “Математика”, g 31 03 03 “Механика”
- •220050, Минск, проспект Франциска Скорины, 4.
- •220030, Минск, ул. Красноармейская, 6.
-
Функции типа void.
1. Для каждой пары введенных целых чисел найти их сумму и произведение двумя способами: с помощью одной функции типа void, которая возвращает и сумму, и произведение двух чисел; с помощью двух функций с одним результатом типа int, одна из которых возвращает сумму, а вторая – произведение двух целых чисел.
void SumMult (int, int, int &, int &);
int MySum (int, int );
int MyMult (int, int );
int main()
{ int a, b, r1, r2; cout<<endl<<" 0 0 -- exit"<<endl; cin>>a>>b;
while(a!=0 || b!=0 )
{ SumMult(a,b,r1,r2) ; cout<<a<<" + "<<b<<" = "<<r1<<endl;
cout << a << " * " << b << " = " << r2 << endl;
cout << a << " + " << b << " = " << MySum (a,b) << endl;
cout << a << " * " << b << " = " << MyMult(a,b) << endl;
cin >> a >> b;
} return 0; }
void SumMult ( int x, int y, int &s, int &p)
{ s=x+y; p=x*y; }
int MySum (int x, int y)
{ return x+y; }
int MyMult (int x, int y)
{ return x*y; }
2. Составить и использовать следующие функции: функцию типа int для нахождения наибольшего из двух чисел с помощью оператора if; функцию типа int для нахождения наибольшего из двух чисел с помощью тернарной операции; функцию типа void для нахождения наибольшего из двух чисел с помощью тернарной операции.
int maxfun1 (int, int);
int maxfun2 (int, int);
void maxfun3 (int , int , int &r);
int main()
{ long int a, b;
cout<<endl<<"Введите два числа; 0, 0 – выход : "<<endl; cin>>a>>b;
while(a!=0 || b!=0 )
{ if (a==b)
cout<<endl<<a<<" is equal "<<b<<endl;
else { cout<<"max of "<<a<<" and "<<b<<"= "<<maxfun1(a,b)<<" "
<<maxfun2(a,b); int mymax;
maxfun3(a,b,mymax); cout<<" "<<mymax<<endl;
}
cin>>a>>b;
}
return 0;
}
int maxfun1(int x,int y) // первый вариант
{ if (x>y) return x;
else return y;
}
int maxfun2(int x,int y) // второй вариант
{ return x>y?x:y;
}
void maxfun3(int x,int y,int &r) //третий вариант
{ r=x>y?x:y;
}
3. Составить и использовать функции ввода, вывода и сортировки одномерного массива.
void inp1(int ,int []);
void out1(int ,int []);
void sort(int ,int []);
int main()
{ clrscr(); const n=5; int a[n];
inp1(n,a); cout<<"Array is not sorted "; out1(n,a);
sort(n,a); cout<<"\n Sorted array "; out1(n,a);
getch(); return 0;
}
void inp1( int size, int x[])
{ int i; cout<<"vvedite masiv \n ";
for(i=0;i<size;i++) cin>>x[i]; }
void out1(int size, int x[])
{ cout<<endl;
for( int i=0; i<size; i++) cout<<x[i]<<" ";
cout<<endl;
}
void sort ( int size, int x[])
{ int i, b, flag;
do { flag=0;
for (i=0; i<size-1; i++)
if(x[i]>x[i+1]) { flag=1;
b=x[i]; x[i]=x[i+1]; x[i+1]=b;
}
size--;
} while(flag);
}
4. В одномерном вещественном массиве найти среднее значение. Числа из отрезка [a, b] увеличить в 10 раз, а остальные оставить без изменения. Составить и использовать следующие функции: ввод массива; вывод массива; вычисление среднего значения элементов массива; изменение массива; функцию main для проверки названных функций.
void INP(float x[], int n);
void OUT(float x[], int n);
float AVER(float x[], int n);
void CHANGE(float a, float b, float x[], int n);
int main()
{ const N=5; float arr[N], a, b; INP(arr,N);
cout<<"Исходный массив"<<endl; OUT(arr,N);
cout<<"Среднее значение \t"<<AVER(arr,N)<<endl;
cout<<"a="; cin>>a; cout<<"b="; cin>>b;
CHANGE(a, b, arr, N);
cout<<"Измененный массив"<<endl; OUT(arr,N);
getch(); return 0;
}
void INP(float x[], int n)
{ for (int i=0; i<n; i++)
{ cout<<"enter "<<(i+1)<<" element of array -\t";
cin>>x[i]; clrscr();
}
}
void OUT(float x[], int n)
{ for (int i=0; i<n; i++)
cout<<(i+1)<<" element of array \t"<<x[i]<<endl;
}
float AVER(float x[],int n)
{ float s=0;
for (int i=0; i<n; i++, s+=x[i]);
s=s/n; return s; }
void CHANGE(float a,float b, float x[], int n)
{ for (int i=0; i<n; i++)
if(a<=x[i] && x[i]<=b)
x[i]*=10;
}
5. В одномерном целочисленном массиве найти, сколько раз повторяется наибольшее число, сколько раз повторяется наименьшее и вывести красным цветом то из них, которое повторяется чаще. Например, в массиве {99, 8, 99, 99, 2} наибольшее число 99 повторяется чаще (3 раза), чем наименьшее 2, которое встречается только 1 раз. Поэтому число 99 выделяем красным цветом. Для массива {99, 7 , 99, 7, 7} красным цветом выделим число 7.
Составим и используем следующие функции: ввод массива (ReadArr); обычный, не “цветной” вывод массива (WriteArr); функцию ColorWriteArr, которая выводит число w массива цветом color1, остальные числа массива – цветом color2; поиск наибольшего и наименьшего элементов массива (MaxMin); функцию Num, которая определяет, сколько раз число w повторяется в массиве; main, проверяющую перечисленные выше функции.
void ReadArr(int [], int );
void WriteArr(int [], int );
void ColorWriteArr(int a[], int , int , int , int );
void MaxMin(int [], int , int &mx, int &mn);
int Num(int [], int , int );
main()
{ const n = 5; int a[5], MyMax, MyMin, num1, num2;
clrscr(); ReadArr(a, n);
WriteArr(a, n); MaxMin(a, n, MyMax, MyMin);
num1 = Num(a, n, MyMax); num2 = Num(a, n, MyMin);
cout<<"\nMyMax "<<MyMax<<" MyMin "<<MyMin<<endl;
cout<<"\nNumMax "<<num1<<" NumMin "<<num2<<endl;
if (num1>num2) ColorWriteArr(a, n, MyMax, 4, 11);
else if (num1<num2) ColorWriteArr(a, n, MyMin, 4, 11);
else cout<<" Number of max = number of min ";
getch(); return 0;
}
void ReadArr(int x[], int size)
{ for (int i=0; i<size; i++)
{ cout<<"a["<<i<<"]="; cin>>x[i];
}
}
void WriteArr(int x[], int size)
{ for (int i=0; i<size; i++) cout<<x[i]<<" ";
printf("\n");
}
void MaxMin(int x[], int size, int& mx, int& mn)
{ mx=x[0]; mn=x[0];
for (int i=0; i<size; i++)
if (x[i]<mn) mn = x[i];
else if (x[i]>mx) mx = x[i];
}
int Num(int x[], int size, int w)
{ int k=0;
for (int i=0; i<size; i++)
if (x[i] == w) k++;
return k;
}
void ColorWriteArr(int x[], int size, int w, int color1, int color2)
{ for (int i=0; i<size; i++)
{ if (x[i] == w) textcolor(color1);
else textcolor(color2);
cprintf("%5d ", x[i]);
}
printf("\n");
}
-
Составить и проверить функцию, которая в текстовом режиме с помощью символов псевдографики рисует границу прямоугольника, не заполняя его внутреннюю область.
Замечание. Коды всех символов, в том числе и символов псевдографики, можно вывести с помощью следующей программы:
main()
{ clrscr(); textcolor(2);
for (int i=1; i<256; i++)
{ cprintf("%4d",i); printf("%c%c" , i, i%12?' ':'\n');
}
getch(); return 0;
}
Программа для задачи 6.
void ramka (int x0, int y0, int, int);
int main ()
{ ramka (2,5, 10, 30); getch(); return 0;
}
void ramka (int x0, int y0, int n1, int n2)
{ int x,y,i; x=x0; y=y0;
gotoxy(x,y++); printf("%c",218); // символ левого верхнего угла
for (i=0;i<n1-2;i++)
{ gotoxy(x,y++); rintf("%c", 179); // для вертикальной линии
}
gotoxy(x++,y); printf("%c",192); // левый нижний угол
for (i=0;i<n2-2;i++)
{ gotoxy(x++,y); printf("%c",196); } // для горизонтальной линии
gotoxy(x,y--); printf("%c",217); // правый нижний угол
for(i=0;i<n1-2;i++)
{ gotoxy(x,y--); printf("%c",179);
}
gotoxy(x--,y); printf("%c",191); // правый верхний угол
for(i=0;i<n2-2;i++)
{ gotoxy(x--,y); printf("%c",196);
}
}
7. Дан одномерный вещественный массив a[n]. Вычислить
.
Составить одну функцию типа void с тремя результатами, которая вычисляет наибольшее число массива, сумму всех его элементов и их произведение. Составить три вещественные функции с одним результатом для вычисления наибольшего числа массива, суммы всех его элементов, их произведения. В головной функции определить массив и с помощью одной или трех функций вычислить f.
8. Ввести два одномерных массива. В каждом из них найти наибольшее количество одинаковых подряд идущих элементов и этот элемент.
-
Ввести три одномерных массива a[n], b[n], c[n]. Получить массив d[n] по формуле d=(a+b) ∙ (b+c), где сложение и умножение выполняются поэлементно. Составить и использовать функции для ввода массива, поэлементного сложения двух массивов, их поэлементного умножения, основную функцию.
-
Рассортировать массив по возрастанию первых двух цифр числа. Составить и использовать функции для ввода массива, нахождения первой и второй цифры для одного целого числа, построения массива первых и вторых цифр, сортировки массивов, вывода массивов в виде таблицы, основную функцию.
Замечание. В следующих задачах, как и в предыдущих, проект разбить на несколько функций.
-
Рассортировать массив следующим образом: сначала должны размещаться палиндромы по возрастанию их значений, а затем не палиндромы тоже по возрастанию их значений. Палиндром – это целое симметричное число, которое одинаково читается слева направо и справа налево.
-
Рассортировать целочисленный массив по убыванию следующих параметров числа:
a) количества единиц в двоичном представлении числа;
б) общего количества пар соседних различных цифр в двоичном представлении числа. Например, 2510 = 110012 имеет 2 такие пары, а число 7410 = 10010102 содержит 5 таких пар;
c) количества букв в 16-м представлении числа.
-
Массив точек плоскости рассортировать по убыванию первой координаты, а если первая координата одинаковая – то по возрастанию расстояния до прямой a∙x + by + c = 0.
-
Составить функцию для нахождения действительных корней квадратного уравнения a∙x2 + b∙x + c =0. Используя ее, составить функцию решения биквадратного уравнения a∙z4 + b∙z2 + c =0.
-
Вывести n параллельных горизонтальных (вертикальных) линий разными цветами.
16. Заполнить все окно вывода следующими фигурами:
-
ромбами;
б) равнобедренными треугольниками;
в) прямоугольными треугольниками с прямым углом внизу слева;
г) прямоугольными треугольниками с прямым углом внизу справа.
17. Нарисовать последовательность прямоугольников, разместив их одним из следующих способов:
-
по диагонали окна, начиная с левого верхнего угла;
б) по диагонали окна, начиная с левого нижнего угла;
в) в шахматном порядке.
Замечание. Задачи типа 15 – 17 можно использовать для рисования в следующих системах:
-
в текстовом режиме Borland C++ 5.01;
-
в “старой” 3-й версии С++ для DOS в графическом режиме, используя стандартные графические функции;
-
в Builder, используя методы компонент Image или Form.