Если последовательность упорядочена по неубыванию, то оставить ее без изменения, иначе получить последовательность 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;
}