Если последовательность упорядочена по неубыванию, то оставить ее без изменения, иначе получить последовательность an, an-1, ... , a1 - C (СИ)

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

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

Здравствуйте! Помогите пожалуйста переделать программу под язык Си с Паскаля! Дана последовательность действительных чисел a1, a2, ... , an (n>=2 и заранее неизвестно). Если последовательность упорядочена по неубыванию, то оставить ее без изменения, иначе получить последовательность an, an-1, ... ,a1.
uses crt;
const n =10; {размер последовательности}
type link=^Tlinks;
 Tlinks = record
  x: real;
  next: link;
 end;
 
var i: integer;
    a,b: real;
    f: link;
    flag: boolean;
procedure add(var f: link; a: real);
var cur: link;
begin
 new(cur);
 cur^.x:=a;
 cur^.next:=f;
 f:=cur;
end;
 
begin
 clrscr;
 f:=nil;
 flag:=false;
 writeln('Введите ',n,' чисел: ');
 for i:=1 to n do
   if (i>=2) then
    begin
     if not odd(i) then
     begin
      readln(b);
      if b<a then
       flag:=true;
      add(f,b);
     end
     else
     begin
      readln(a);
      if a<b then
       flag:=true;
      add(f,a);
     end;
    end
    else
     readln(a);
  if flag=false then
   writeln('Последовательность упорядочена по неубыванию')
  else
   begin
    writeln('Получена обратная последовательность: ');
    while f<>nil do
     begin
      write(f^.x,' ');
      f:=f^.next;
     end;
   end;
  readln;
end.
Нужно записать ответ в файл. Решение с использованием линейного односвязного списка. Большое спасибо!

Решение задачи: «Если последовательность упорядочена по неубыванию, то оставить ее без изменения, иначе получить последовательность an, an-1, ... , a1»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node_t {
    int value;
    struct node_t* next;
}   List;
 
//-----------------------------------------------------------------------------
void push(List** list, int value) {
    List* node = malloc(sizeof(List));
    node->value = value;
    node->next = *list;
    *list = node;
}
//-----------------------------------------------------------------------------
int pop(List** list) {
    List* node = *list;
    int value = node->value;
    *list = node->next;
    free(node);
 
    return value;
}
//-----------------------------------------------------------------------------
void print(FILE* f, const List* list) {
    if (list) {
        print(f, list->next);
        fprintf(f, "%d ", list->value);
    }
}
//-----------------------------------------------------------------------------
int isSort(const List* list) {
    const List* back;
    int isRight = 1;
 
    while (list && isRight) {
        back = list;
        if ((list = list->next)) {
            isRight = (list->value <= back->value);
        }
    }
 
    return isRight;
}
//-----------------------------------------------------------------------------
void reverse(List** list) {
    List* new = NULL;
    while (*list) {
        push(&new, pop(list));
    }
    *list = new;
}
//-----------------------------------------------------------------------------
 
int main() {
    FILE* f;
    List* list = NULL;
    int value;
 
    printf("input elemets (0 for exit): ");
 
    while ((scanf("%d", &value) == 1) && (value)) {
        push(&list, value);
    }
 
    if (!isSort(list)) {
        reverse(&list);
    }
 
    print(stdout, list);
 
    if ((f = fopen("file.txt", "w"))) {
        print(f, list);
        fclose(f);
    }
 
    return 0;
}

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


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

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

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