Индивидуальное задание (FIFO, массивы) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет! Ребята, нужна ваша помощь. Мне нужно написать несколько программ на работу с очередями, используя динамические структуры. Но в этой теме не очень разобрался. Точнее, понимаю, как все работает, но вызрели 2 вопроса. 1) Последний элемент FIFO всегда NULL?
(*p1).value = NULL; // p1 — указатель на текущий элемент; value — значение элемента
(*p1).next = NULL; // next — адрес следующего элемента
2) Нужно три указателя для работы с очередью: для первого, текущего и следующего элементов?

Решение задачи: «Индивидуальное задание (FIFO, массивы)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <time.h>
#include <math.h>
 
main(){
    int *mas, i, n = 0, min, max, *m, z = 0, x;
    while(n<1){
        printf("Введите n: ");
        scanf("%d", &n);
    }
    mas = (int *)malloc(n * sizeof(int));
    if(!mas){
        printf("Оишбка выделения памяти!\n");
        system("PAUSE");
        return 0;
    }
    srand(time(NULL));
    printf("Исходный массив: \n");
    for(i = 0; i < n; i++){
        *(mas+i) = -10 + rand()%21;
        printf("%5d", *(mas+i));
    }
    printf("\n");
    min = 0;
    max = 0;
    for(i = 1; i < n; i++){
        if(*(mas+i) > *(mas+max)) max = i;
        if(*(mas+i) < *(mas+min)) min = i;
    }
    x = n - abs(max - min)+1;
    m = (int *)malloc(x * sizeof(int));
    if(!m){
        printf("Оишбка выделения памяти!\n");
        system("PAUSE");
        return 0;
    }
    if(min < max){
        for(i = 0; i < n; i++)
            if((i <= min)||(i >= max)) *(m + z++) = *(mas + i);
    }else
        for(i = 0; i < n; i++)
            if((i <= max)||(i >= min)) *(m + z++) = *(mas + i);
    free(mas);
    mas = m;
    printf("Полученный массив:\n");
    for(i = 0; i < x; i++)
        printf("%5d", *(mas+i));
    free(mas);
   printf("\n");
    system("PAUSE");
    return 0;
}

Объяснение кода листинга программы

  1. Объявление переменных:
    • mas: указатель на массив целых чисел (int)
    • i: целочисленная переменная для цикла
    • n: целочисленная переменная для количества элементов массива
    • min: целочисленная переменная для хранения минимального значения в массиве
    • max: целочисленная переменная для хранения максимального значения в массиве
    • m: указатель на массив целых чисел (int)
    • z: целочисленная переменная для хранения индекса элемента в массиве m
    • x: целочисленная переменная для хранения размера нового массива
    • srand(time(NULL)): инициализация генератора случайных чисел текущим временем
    • printf(Введите n:): вывод сообщения с просьбой ввести количество элементов массива
    • scanf(%d, &n): ввод количества элементов массива с помощью функции scanf
  2. Выделение памяти под массив с помощью функции malloc:
    • mas = (int )malloc(n sizeof(int));
    • если память не может быть выделена, программа выводит сообщение об ошибке и завершается
  3. Инициализация массива:
    • srand(time(NULL)): инициализация генератора случайных чисел текущим временем
    • for(i = 0; i < n; i++){
    • *(mas+i) = -10 + rand()%21;
    • printf(%5d, *(mas+i));
    • printf(\n);
  4. Поиск минимального и максимального значений в массиве:
    • min = 0;
    • max = 0;
    • for(i = 1; i < n; i++){
    • if((mas+i) > (mas+max)) max = i;
    • if((mas+i) < (mas+min)) min = i;
    • x = n - abs(max - min)+1;
  5. Выделение памяти под новый массив:
    • m = (int )malloc(x sizeof(int));
    • если память не может быть выделена, программа выводит сообщение об ошибке и завершается
  6. Копирование элементов из исходного массива в новый:
    • if(min < max){
    • for(i = 0; i < n; i++)
      • if((i <= min)||(i >= max)) (m + z++) = (mas + i);
    • else
    • for(i = 0; i < n; i++)
      • if((i <= max)||(i >= min)) (m + z++) = (mas + i);
  7. Освобождение памяти под исходный массив:
    • free(mas);
  8. Замена указателя на массив на указатель на новый массив:
    • mas = m;
  9. Вывод нового массива:
    • printf(Полученный массив:\n);
    • for(i = 0; i < x; i++)
    • printf(%5d, *(mas+i));
  10. Освобождение памяти под новый массив:
    • free(mas);
  11. Вывод сообщения и завершение программы:
    • printf(\n);
    • system(PAUSE);
    • return 0;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы