Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб1(Книга).doc
Скачиваний:
7
Добавлен:
23.12.2018
Размер:
369.66 Кб
Скачать
  1. Функции типа 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");

}

  1. Составить и проверить функцию, которая в текстовом режиме с помощью символов псевдографики рисует границу прямоугольника, не заполняя его внутреннюю область.

Замечание. Коды всех символов, в том числе и символов псевдографики, можно вывести с помощью следующей программы:

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. Ввести два одномерных массива. В каждом из них найти наибольшее количество одинаковых подряд идущих элементов и этот элемент.

  1. Ввести три одномерных массива a[n], b[n], c[n]. Получить массив d[n] по формуле d=(a+b) ∙ (b+c), где сложение и умножение выполняются поэлементно. Составить и использовать функции для ввода массива, поэлементного сложения двух массивов, их поэлементного умножения, основную функцию.

  2. Рассортировать массив по возрастанию первых двух цифр числа. Составить и использовать функции для ввода массива, нахождения первой и второй цифры для одного целого числа, построения массива первых и вторых цифр, сортировки массивов, вывода массивов в виде таблицы, основную функцию.

Замечание. В следующих задачах, как и в предыдущих, проект разбить на несколько функций.

      1. Рассортировать массив следующим образом: сначала должны размещаться палиндромы по возрастанию их значений, а затем не палиндромы тоже по возрастанию их значений. Палиндром – это целое симметричное число, которое одинаково читается слева направо и справа налево.

      2. Рассортировать целочисленный массив по убыванию следующих параметров числа:

a) количества единиц в двоичном представлении числа;

б) общего количества пар соседних различных цифр в двоичном представлении числа. Например, 2510 = 110012 имеет 2 такие пары, а число 7410 = 10010102 содержит 5 таких пар;

c) количества букв в 16-м представлении числа.

  1. Массив точек плоскости рассортировать по убыванию первой координаты, а если первая координата одинаковая – то по возрастанию расстояния до прямой ax + by + c = 0.

  2. Составить функцию для нахождения действительных корней квадратного уравнения ax2 + bx + c =0. Используя ее, составить функцию решения биквадратного уравнения az4 + bz2 + c =0.

  3. Вывести n параллельных горизонтальных (вертикальных) линий разными цветами.

16. Заполнить все окно вывода следующими фигурами:

    1. ромбами;

б) равнобедренными треугольниками;

в) прямоугольными треугольниками с прямым углом внизу слева;

г) прямоугольными треугольниками с прямым углом внизу справа.

17. Нарисовать последовательность прямоугольников, разместив их одним из следующих способов:

    1. по диагонали окна, начиная с левого верхнего угла;

б) по диагонали окна, начиная с левого нижнего угла;

в) в шахматном порядке.

Замечание. Задачи типа 15 – 17 можно использовать для рисования в следующих системах:

  • в текстовом режиме Borland C++ 5.01;

  • в “старой” 3-й версии С++ для DOS в графическом режиме, используя стандартные графические функции;

  • в Builder, используя методы компонент Image или Form.