Напечатать только положительные числа последовательности - C (СИ)

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

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

Задание: Дана последовательность. Напечатать только положительные числа из этой последовательности, причем, если подряд идет несколько положительных чисел, печатать их в обратном порядке, используя стек.
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#define NMAX 80
 
/*главная ф-я*/
 
void main()
{
    int str[NMAX];
    int stack[NMAX];
    int i;
    int j=-1;
    int n, nom=0;
    
    setlocale (LC_ALL, "Russian");
    printf("Введите кол-во элементов:\n");
    scanf_s ("%d", &n);
 
    printf("Последовательность:\n");
    for (i=0; i < n; i++)
    scanf_s("%d", &str[i]);

    for (i=0; i < n; i++)
    {
        if (str[i] > 0 ) 
 
            stack[++j] = str[i];
 
        else 
        {
            if (j >= 0) 
            {
            for (j=nom; j >=0; j--)
            printf ("%d ", stack[j]);
            j=-1;
            nom=0;
            }
        }
         nom++;
     }
    _getch();
 
}
Run-Time Check Failure #2 - Stack around the variable 'stack' was corrupted. Прога ведет себя все время по разному.. не могу понять в чем загвоздка

Решение задачи: «Напечатать только положительные числа последовательности»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
#define NMAX 80
 
int main()
{
   int arr[NMAX];
   int i, j, k;
   int n;
 
   setlocale(LC_ALL, "Russian");
   printf("Введите кол-во элементов: ");
   scanf("%d", &n);
 
   printf("Последовательность: ");
   for (i = 0; i < n; i++)
   {
      scanf("%d", &arr[i]);
   }
 
   i = 0;
   while (i < n)
   {
      for (; (i < n) && (arr[i] <= 0); ++i) { ; }
 
      k = i;
 
      for (; (i < n) && (arr[i] > 0); ++i) { ; }
 
      for (j = i - 1; j >= k; --j)
      {
         printf("%d ", arr[j]);
      }
   }
 
   _getch();
 
   return 0;
}

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

Вывод программы представляет собой последовательность положительных чисел из исходного массива.

  1. Объявлены три переменные: i, j, k, которые будут использоваться в качестве индексов массива.
  2. Переменная n инициализируется вводом пользователя, который указывает количество элементов в последовательности.
  3. В цикле scanf-printf пользователь вводит исходную последовательность.
  4. Следующий цикл while отбирает отрицательные элементы.
  5. В каждой итерации внутреннего цикла while, если текущий элемент отрицательный, увеличивается значение i, и выполнение внутреннего цикла прерывается.
  6. Когда внутренний цикл while завершается, k присваивается значение i.
  7. В каждой итерации внешнего цикла while, если текущий элемент больше нуля, увеличивается значение i.
  8. Когда внешний цикл while завершается, для каждого значения j от k до i-1 выводится элемент массива arr[j].
  9. Программа завершается, когда пользователь нажимает любую клавишу.
  10. Значение 0 возвращается в функцию main(), что означает успешный конец работы программы.

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


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

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

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