Лаб. 5 ОП (Вариант 30, 20)
.docxЗадание 1 (Вариант 30):
#include <stdio.h>
#include <iostream>
#include <clocale>
#include <Windows.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#define N 255
using namespace std;
/*
Создать функцию для поиска слов в строке, начинающихся с заглавной буквы (возвращается массив указателей на начало слов).
Тестовая программа:
Ввести текст (несколько строк) с клавиатуры, признак окончания – слово «end». Данные размещать в динамической области.
Изменить текст: слова, начинающиеся с заглавной буквы переместить в начало строки. Вывести текст на экран и отформатировать: После точки начинать с «красной строки»
*/
void main() {
int k = 0;
setlocale(0, "Russian");
char* ptr_text[N];
char buff[N] = { ' ' };
printf("Введите несколько строк на латинице, окончание ввода - end\n");
do
{
gets_s(buff);
ptr_text[k] = (char*)malloc(strlen(buff) + 1);
strcpy_s(ptr_text[k], strlen(buff) + 1, buff);
k++;
} while (!(buff[0] == 'e' && buff[1] == 'n' && buff[2] == 'd') && (k < N));
for (int i = 0; i < k; i++) {
for (int j = 0; ptr_text[i][j] != '\0'; j++) {
if (isupper(ptr_text[i][0])) {
printf("%c", ptr_text[i][j]);
if (ptr_text[i][j] == '.') {
printf("\n");
}
}
}
printf(" ");
}
for (int i = 0; i < k; i++) {
for (int j = 0; ptr_text[i][j] != '\0'; j++) {
if (isupper(ptr_text[i][0]) == 0) {
printf("%c", ptr_text[i][j]);
if (ptr_text[i][j] == '.') {
printf("\n");
}
}
}
printf(" ");
}
}
Задание 2 (Вариант 20):
#include <iostream>
#include <iomanip>
#include <iostream>
#include <iomanip>
#include <clocale>
#include <time.h>
/*
Создать динамическую вещественную матрицу NxM (N и M ввести с клавиатуры Размещение в памяти как в примере 3.
Создать функцию, которая формирует массив результатов – возвращает указатели на максимальные элементы в заштрихованной области .
*/
void init_matrix(double *matrix, int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++)
matrix[i * M + j] = rand() % 100/3.1;
}
}
void print_matrix(double *matrix, int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++){
if (i+j<(N+M)/2){
printf("\x1B[32m%f\033[0m\t",matrix[i * M + j]);
}
else{
printf("%f\t",matrix[i * M + j]);
}
}
printf("\n");
}
}
double **max(double *matrix, int N, int M){
double **maxmat = new double *[N];
for (int i = 0; i < N; i++){
maxmat[i]=&matrix[i*M];
for (int j=0; j<M;j++){
if ((i+j < (N+M)/2) && (matrix[i * M + j] > *maxmat[i]))
*maxmat[i] = matrix[i * M + j];
}
}
return maxmat;
}
int main(){
srand(time(0));
setlocale(LC_ALL, "Russian");
int N, M;
printf("Введите количество строк:");
scanf("%d",&N);
printf("Введите количество столбцов:");
scanf("%d",&M);
double *matrix=new double[N*M];
init_matrix(matrix,N,M);
printf("Матрица:\n");
print_matrix(matrix,N,M);
printf("Максимальные значения каждой строки в закрашенной области:\n");
double **Max = max(matrix,N,M);
for (int i = 0; i < N; i++){
printf("%f",*Max[i]);
printf(" ");
}
delete [] matrix;
delete [] Max;
return(0);
}