Skip to content

Программирование_Лабораторная_работа_4 #7

@veskprogrammer

Description

@veskprogrammer

Лабораторная работа №4.

Студент: Киселев Георгий, ИВТ-1.1


Комплект 1:

Задача 1.1:

Постановка задачи:
Создать две функции для вычисления факториала числа:

  1. Используя цикл.
  2. Используя рекурсию.

Математическая модель:
Факториал числа ( n ): ( n! = n \times (n-1) \times \dots \times 1 ).

Список идентификаторов:

Имя переменной Тип данных Описание
n int Входное число
result int Результат (факториал)

Код программы:

#include <stdio.h>

// Факториал через цикл
int factorial_loop(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

// Факториал через рекурсию
int factorial_recursive(int n) {
    if (n == 0 || n == 1) return 1;
    return n * factorial_recursive(n - 1);
}

int main() {
    int num = 5;
    printf("Факториал через цикл: %d\n", factorial_loop(num));
    printf("Факториал через рекурсию: %d\n", factorial_recursive(num));
    return 0;
}

Результат:

Факториал через цикл: 120  
Факториал через рекурсию: 120  

Задача 1.2:

Постановка задачи:
Поменять местами значения чётных и нечётных ячеек массива.

Список идентификаторов:

Имя переменной Тип данных Описание
arr int* Динамический массив
size int Размер массива

Код программы:

#include <stdio.h>
#include <stdlib.h>

void swap_even_odd(int *arr, int size) {
    for (int i = 0; i < size - 1; i += 2) {
        int temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
    }
}

int main() {
    int size = 12;
    int *arr = (int*)malloc(size * sizeof(int));
    for (int i = 0; i < size; i++) arr[i] = i;

    swap_even_odd(arr, size);

    for (int i = 0; i < size; i++) printf("%d ", arr[i]);
    free(arr);
    return 0;
}

Результат:

1 0 3 2 5 4 7 6 9 8 11 10  

Задача 1.3:

Постановка задачи:
Создать функции для работы с двумерным массивом: выделение/освобождение памяти, заполнение, вывод.

Код программы:

#include <stdio.h>
#include <stdlib.h>

double** create_matrix(int rows, int cols) {
    double **matrix = (double**)malloc(rows * sizeof(double*));
    for (int i = 0; i < rows; i++) {
        matrix[i] = (double*)malloc(cols * sizeof(double));
    }
    return matrix;
}

void free_matrix(double **matrix, int rows) {
    for (int i = 0; i < rows; i++) free(matrix[i]);
    free(matrix);
}

void fill_matrix(double **matrix, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = i + j;
        }
    }
}

void print_matrix(double **matrix, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%.2f ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int rows = 3, cols = 3;
    double **matrix = create_matrix(rows, cols);
    fill_matrix(matrix, rows, cols);
    print_matrix(matrix, rows, cols);
    free_matrix(matrix, rows);
    return 0;
}

Результат:

0.00 1.00 2.00  
1.00 2.00 3.00  
2.00 3.00 4.00  

Комплект 2:

Задача 2.1:

Постановка задачи:
Выполнить операции со строками: вычисление длины, копирование, конкатенация, сравнение, изменение регистра.

Код программы:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MY_SIZE 20

int main() {
    char my_string[MY_SIZE] = "Hello";
    char dest[MY_SIZE];

    // Длина строки
    printf("Длина: %zu\n", strlen(my_string));

    // Копирование
    strcpy(dest, my_string);
    printf("Копия: %s\n", dest);

    // Конкатенация
    char str1[20] = "Hello, ";
    char str2[] = "World!";
    strcat(str1, str2);
    printf("Конкатенация: %s\n", str1);

    // Сравнение
    printf("Сравнение: %d\n", strcmp("abc", "abd"));

    // Изменение регистра
    for (int i = 0; i < strlen(my_string); i++) {
        my_string[i] = toupper(my_string[i]);
    }
    printf("Верхний регистр: %s\n", my_string);
    return 0;
}

Результат:

Длина: 5  
Копия: Hello  
Конкатенация: Hello, World!  
Сравнение: -1  
Верхний регистр: HELLO  

Задача 2.2:

Код программы:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str_int[] = "123";
    char str_double[] = "45.67";

    printf("Целое: %d\n", atoi(str_int));
    printf("Дробное: %.2f\n", atof(str_double));
    return 0;
}

Результат:

Целое: 123  
Дробное: 45.67  

Задача 2.3:

Код программы:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main() {
    char str[] = "A1b C,d!";

    for (int i = 0; i < strlen(str); i++) {
        printf("Символ '%c': ", str[i]);
        if (isalpha(str[i])) printf("буква ");
        if (isdigit(str[i])) printf("цифра ");
        if (isspace(str[i])) printf("пробел ");
        if (ispunct(str[i])) printf("знак пунктуации ");
        printf("\n");
    }
    return 0;
}

Результат:

Символ 'A': буква  
Символ '1': цифра  
Символ 'b': буква  
Символ ' ': пробел  
Символ 'C': буква  
Символ ',': знак пунктуации  
Символ 'd': буква  
Символ '!': знак пунктуации  

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions