zadanieNaYkazateli.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdint.h>
  3. #include <stdio.h>
  4. #include <math.h>
  5. #include <stdlib.h>
  6. // 1) Функция для редактирования значения переменной через указатель
  7. void edit_and_print_value(int* num) {
  8. printf("Введите новое значение переменной: ");
  9. scanf("%d", num); // Изменяем значение переменной через указатель
  10. printf("Текущее значение переменной: %d\n", *num); // Выводим новое значение
  11. }
  12. // 2) Функция для создания и удаления массива из 1 млн элементов
  13. void create_and_delete_array() {
  14. int* array = (int*)malloc(1000000 * sizeof(int)); // Выделяем память для массива
  15. if (array == NULL) {
  16. printf("\nОшибка выделения памяти!\n");
  17. return;
  18. }
  19. // Заполняем массив
  20. for (int i = 0; i < 1000000; i++) {
  21. *(array + i) = i;
  22. }
  23. // Вывод первых 10 элементов
  24. printf("\nПервые 10 элементов массива: \n");
  25. for (int i = 0; i < 10; i++) {
  26. printf("%d ", *(array + i));
  27. }
  28. printf("\n");
  29. // Вывод последних 10 элементов
  30. printf("Последние 10 элементов массива: \n");
  31. for (int i = 999990; i < 1000000; i++) {
  32. printf("%d ", *(array + i));
  33. }
  34. printf("\n");
  35. free(array); // Освобождаем память
  36. printf("Массив удален.\n");
  37. }
  38. // 3) Функция для вывода массива произвольной длины
  39. void print_array(int* array, int length) {
  40. printf("\nЭлементы массива:\n");
  41. for (int i = 0; i < length; i++) {
  42. printf("%d ", *(array + i));
  43. }
  44. printf("\n");
  45. }
  46. // 4) Функция для вывода треугольной матрицы
  47. void create_matrix() {
  48. int rows = 5;
  49. int count = 1;
  50. // Выделяем память для строк
  51. int** matrix = (int**)malloc(rows * sizeof(int*));
  52. // Заполняем каждую строку
  53. for (int i = 0; i < rows; i++) {
  54. matrix[i] = (int*)malloc((i + 1) * sizeof(int));
  55. for (int j = 0; j <= i; j++) {
  56. matrix[i][j] = count++;
  57. }
  58. }
  59. // Вывод матрицы
  60. printf("\nТреугольная матрица:\n");
  61. for (int i = 0; i < rows; i++) {
  62. for (int j = 0; j <= i; j++) {
  63. printf("%d ", matrix[i][j]);
  64. }
  65. printf("\n");
  66. }
  67. // Освобождаем память
  68. for (int i = 0; i < rows; i++) {
  69. free(matrix[i]);
  70. }
  71. free(matrix);
  72. }
  73. // 5) Функция с указателем на функцию
  74. void example_function(int x)
  75. {
  76. printf("\nЗначение: %d\n", x);
  77. }
  78. // Функция, принимающая указатель на функцию в качестве аргумента
  79. void call_function(void (*func)(int), int value) {
  80. func(value); // Вызываем переданную функцию
  81. }
  82. int main() {
  83. // Устанавливаем кодировку для русскоязычного вывода
  84. system("chcp 1251>null");
  85. // 1) Редактирование значения переменной через указатель
  86. int value;
  87. printf("Введите начальное значение переменной: ");
  88. scanf("%d", &value);
  89. edit_and_print_value(&value);
  90. // 2) Создание и удаление массива из 1 млн элементов
  91. create_and_delete_array();
  92. // 3) Вывод массива произвольной длины
  93. int array[] = { 1, 2, 3, 4, 5 };
  94. int length = sizeof(array) / sizeof(array[0]);
  95. print_array(array, length);
  96. // 4) Создание и вывод треугольной матрицы
  97. create_matrix();
  98. // 5) Пример с указателем на функцию
  99. call_function(example_function, 10);
  100. return 0;
  101. }