Если последовательность упорядочена по неубыванию, то оставить ее без изменения, иначе получить последовательность 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д