Лабораторная работа 25
№ 3, с. 25
Написать программу, которая читает с клавиатуры строку символов. Необходимо заменить в строке все латинские буквы на следующие по алфавиту буквы, а букву 'z' заменить на 'a'.Вывести результат на экран. Длина строки не вводится, а определяется в программе. Если строка не удовлетворяет условию, выдать сообщение об ошибке и предложить ввести снова.
Код:
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{ setlocale (LC_ALL, "Rus");
char in_string[500];
int k,i;
printf( "Введите строку: \n");
gets(in_string);
printf( "Строка\n%s\n", in_string);
k=(int)strlen( in_string);
printf("%d\n",k);
for(i=0;i<k;i++)
{
if(in_string[i]=='z')
in_string[i]='a';
if (((in_string[i]>'a')&&(in_string[i]<'z'))||((in_string[i]>'A')&&(in_string[i]<'Z')))
in_string[i] =in_string[i]+1;
}
printf( "Преобразованная строка:\n%s\n", in_string);
}
№5, с.26
(5б) Написать программу, которая читает с клавиатуры строку символов. Необходимо перед каждым знаком '=' вставить символ, стоящий за ним, если таковой имеется (если отсутствует – оставить без изменения). Вывести результат на экран. Длина строки не вводится, а определяется в программе. Если строка не удовлетворяет условию, выдать сообщение об ошибке и предложить ввести снова.
#include <stdio.h>
#include <iostream>
void main()
{
setlocale (LC_ALL, "Rus");
char X[300];
int i,n=0;
printf("Введите строку: \n",n);
for(i=0;(X[i]=getchar())!='\n';i++)
n++;
printf("Преобразованная строка: \n");
for(i=0;i<n;i++)
{if(X[i+1]=='=')
{putchar(X[i]);
putchar(X[i+2]);}
else
putchar(X[i]);}
printf("\n");
}
Лабораторная работа №8
Написать программу, которая определяет номер строки квадратной матрицы, сумма элементов которой максимальна. Массив заполняется пользователем с клавиатуры. Результат вывести на экран.
#include <stdio.h>
#include <iostream>
#define N 3
void vvod(int a[][N], int m, int n);
void summ(int a[][N], int m, int n);
void vivod (int a[][N], int m, int n);
void main()
{
setlocale (LC_ALL, "Russian");
int b[N][N], m, n, A, max;
printf ("Введите количество строк:\n");
scanf ("%d", &m);
printf ("Введите количество столбцов:\n");
scanf ("%d", &n);
vvod(b, m, n);
vivod(b, m, n);
summ (b, m, n);
}
void vvod(int a[][N], int m, int n )
{
setlocale (LC_ALL, "Russian");
int i,j;
printf ("Введите массив:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
void vivod (int a[][N], int m, int n)
{
setlocale (LC_ALL, "Russian");
int i,j;
printf("Полученная матрица:\n");
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
printf("%5d", a[i][j]);
printf("\n");
}}
void summ(int a[][N], int m, int n)
{
int i,j,sum,max,k;
for(i=0;i<m;i++)
{
sum=0;
for (j=0;j<n;j++)
{sum+=a[i][j];}
if (i==0)
max=sum;
else if (max<sum)
{max=sum;
k=i;}}
printf ("Максимальная сумма %d строки равна %d\n",(k+1), max);
}
Лабораторная № 23
1. Написать функцию, в которой внутри будет переменная (static), сохраняющая количество раз, сколько была вызвана функция за время выполнения программы.
#include <iostream>
using namespace std;
void main(void)
{void func (int k);
setlocale(LC_ALL,"Russian");
int k, n;
printf("Введите количество раз");
scanf("%d",&n);
for(k=0;k<n;k++)
func(k);}
void func (int k)
{static int a=0;
a++;
printf("Функция вызвана %d разa\n",a);}
2. В функции одного исходного файла (1.cpp) объявить ссылку на переменную (extern) другого файла (2.cpp). Умножить ее на переменную, введенную в файле 1.cpp и вывести результат на экран.
1.cpp
extern int A=10;
2.cpp
#include <iostream>
void main()
{
extern int A;
int P=1, B=5;
P=A*B;
printf ("P=%d\n",P);
}
3.Имеются два файла 1.cpp и 2.cpp. В каждом из файлов ввести с клавиатуры по одной переменной. Вывести на экран переменные другого файла.
1.cpp
#include <stdio.h>
int A;
void main(void)
{void Func (int );
int t=0;
printf(" Enter A \n");
scanf("%d",&A);
Func (t);
extern int B;
printf(" N2 = %d\n",B);}
2.cpp
#include <stdio.h>
int B;
void Func (int t)
{printf(" Enter B \n");
scanf("%d",&B);
extern int A;
printf(" N1 = %d\n",A);}
4.Написать функцию вычисления факториала (величина переменной должна быть очень большой) с учетом того, чтобы она выполнялась максимально быстро, переменная должна быть объявлена классом register.
#include <iostream>
void main()
{register int i,fact=1,j;
printf("Vvedite i\n");
scanf("%d",&i);
for(j=i;j>=1;j--)
fact=fact*j;
printf("Fact=%d\n",fact);}
Лабораторная № 22(29,30,31)
Написать программу нахождения суммы четных положительных элементов и нечетных положительных, а также произведение положительных. Массив заполняется пользователем с клавиатуры. Результат вывести на экран.
#include <stdio.h>
#include <iostream>
#include <locale>
const int n=3;
int func1 (int arr[n][n], int n);
int func2 (int arr[n][n], int n);
int func_pr (int arr[n][n], int n);
void main()
{
setlocale (LC_ALL, "Rus");
int arr[n][n], *p, i, j;
p=&arr[0][0];
printf ("Введите массив\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++,p++)
{
scanf ("%d", p);
}
}
printf ("Сумма нечетных положительных элементов равна %d\n", func1(arr, n));
printf ("Сумма четных положительных элементов равна %d\n", func2(arr, n));
printf ("Сумма положительных элементов равна %d\n", func_pr(arr, n));
}
int func1 (int arr[n][n], int n)
{
int i, j, sum=0, *p;
p=&arr[0][0];
for (i=0; i<n; i++)
{
for (j=0; j<n; j++,p++)
{
if ((*p%2)&&(*p>0))
{
sum=sum+*p;
}
}
}
return (sum);
}
int func2 (int arr[n][n], int n)
{
int i, j, sum=0, *p;
p=&arr[0][0];
for (i=0; i<n; i++)
{
for (j=0; j<n; j++,p++)
{
if ((*p%2==0)&&(*p>0))
{
sum=sum+*p;
}
}
}
return (sum);
}
int func_pr (int arr[n][n], int n)
{
int i, j, pr=1, *p;
p=&arr[0][0];
for (i=0; i<n; i++)
{
for (j=0; j<n; j++,p++)
{
if (*p>0)
{
pr=pr**p;
}
}
}
return (pr);
}
№9 стр 21
Написать программу нахождения в заданной матрице седловой точки. Седловая точка - это максимальный элемент в столбце и одновременно минимальный в строке.
#include <stdio.h>
#include <iostream>
#include <locale>
const int n=3;
void func_str_min (int arr[n][n], int *b[n], int n);
void func_stl_max (int arr[n][n], int *k[n], int n);
void main()
{
setlocale (LC_ALL, "Rus");
int arr[n][n], *p, *u1[n], *u2[n], i, j;
p=&arr[0][0];
printf ("Введите массив\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++,p++)
{
scanf ("%d", p);
}
}
p=&arr[0][0];
func_str_min (arr,u1,n);
p=&arr[0][0];
func_stl_max (arr,u2,n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (u1[i]==u2[j])
{
printf (" Элемент [%d][%d]=%d является седловой точкой\n", i, j,*u1[i]);
}
}
}
}
void func_str_min (int arr[n][n], int *b[n], int n)
{
int min, i, j;
for (i=0; i<n; i++)
{
min=*(*(arr+i)+0);
b[i]=&arr[i][0];
for (j=0; j<n; j++)
{
if (min>*(*(arr+i)+j))
{
min=*(*(arr+i)+j);
b[i]=&arr[i][j];
}
}
}
}
void func_stl_max (int arr[n][n], int *k[n], int n)
{
int max, i, j;
for (i=0; i<n; i++)
{
max=*(*(arr+0)+i);
k[i]=&arr[0][i];
for (j=0; j<n; j++)
{
if (max<(*(*(arr+j)+i)))
{
max=*(*(arr+j)+i);
k[i]=&arr[j][i];
}
}
}
}