Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Mikhail_T
0 / 0 / 0
Регистрация: 22.11.2014
Сообщений: 1
1

Вывести сначала все отрицательные числа файла, а потом все положительные

25.11.2014, 19:40. Просмотров 722. Ответов 1
Метки нет (Все метки)

Здравствуете.
Требуется написать программу, которая из заданного файла (состоящего последовательности целых чисел, которая заканчивается 0) при помощи рекурсии(!) выводит сначала все отрицательные числа, а потом все положительные.


Мой код выглядит вот так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program new;
uses crt;
type Tf=file of integer;
var inputfile: Tf;
 
procedure osn(var inputf: Tf);
var x:integer;
begin
   read(inputf, x);
   if (x<>0) and not eof(inputf) then
   begin
      if x>0 then
         write(x, ' ');
      osn(inputfile);
      if x<0  then
         write(x,' ');
      end;
end;
 
begin
   assign(inputfile, 'idiot.txt');
   reset(inputfile);
 
   osn(inputfile);
 
   close (inputfile);
 
   writeln;
   readln;
 
end.

Проблема заключается в том, что с типом данных integer она не работает: любо выдается ошибка 100, то есть читается уже полностью прочитанный файл, либо выводятся совершенно не те числа:
так например, если на вход подается последовательность -1 2 3 -4 5 -3 2 3 0, то на выходе получается
45 49 32 50 32 51 32 45 52 32 53 32 45 51 32 50 32 51 32 -257.

Скорее всего первый случай неверной работы программы связан со вторым, так как рекурсия не заканчивается в 0, поскольку считывается число отличное от нуля, и в сравнении условие if x<>0 выполняется.

Я пробовал применять этот алгоритм с типом данных char, и выводить сначала все цифры последовательности, а затем буквы, и результат был правильным.

Может быть кто-то знает, как избавиться от этой проблемы, или сталкивался с чем-то похожим, или знает как справится с ней, помогите мне пожалуйста.

Спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2014, 19:40
Ответы с готовыми решениями:

Из файла f переписать в пустой файл g сначала все положительные числа, а потом все отрицательные
Помогите пожалуйста с заданием type rad = file of integer; Описать процедуру p(f,g) от двух...

Из файла f переписать в пустой файл сначала все положительные, а потом все отрицательные числа
Нужна помощь! Описать процедуру p(f,g) от двух файлов типа rad, которая из файла f переписывает...

Преобразовать массив так, чтобы сначала были расположены все отрицательные числа и нули, а потом все положительные
Помогите пожалуста! Нада здать лабу, а зделать не могу! Задание на лабораторную работу 1....

Вывести сначала все положительные числа и нули, а следом - все отрицательные числа
Дан массив действительных чисел, содержащий n элементов. Вывести сначала все положительные числа и...

Видоизменить массив таким образом, чтобы сначала шли все положительные элементы, потом все отрицательные
Принять в процедуру некоторый заполненный массив с отрицательными и положительными элементами....

1
JIeIIIa
954 / 573 / 136
Регистрация: 23.05.2012
Сообщений: 7,370
26.11.2014, 01:42 2
Проблема в том, что Вы, скорей всего создаете текстовый файл, а пытаетесь работать с ним как с типизированным. Ну по крайней мере судя по 4-ой строке.
Для Ваших входящих данных:
Цитата Сообщение от Mikhail_T Посмотреть сообщение
-1 2 3 -4 5 -3 2 3 0
создайте файл idiot.txt следующим кодом
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program InputData;
uses crt;
type Tf=file of integer;
var inputfile: Tf;
 
begin
   assign(inputfile, 'idiot.txt');
   rewrite(inputfile);
   write(inputfile,-1);
   write(inputfile,2);
   write(inputfile,3);
   write(inputfile,-4);
   write(inputfile,5);
   write(inputfile,-3);
   write(inputfile,2);
   write(inputfile,3);
   write(inputfile,0);
   close(inputfile);
end.
Потом откройте созданный файл в текстовом редакторе Кстати, после создания таким образом файла Ваша программа будет нормально работать. Только вот вначале выводятся положительные, а затем отрицательные числа. Чтоб было наоборот поменяйте местами условия в 12-ой и 15-ой строках.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 01:42

Переставить элемента массива, так чтобы сначала было расположены все положительные элементы, потом все отрицательные
Всем добрый вечер! Есть задача: Кто знает как ее решить - помогите, с меня спасибо:)

Разместить элементы массива так,чтоб сначала шли все положительные числа,а потом-отрицательные, не создавая новый массив
Дан массив из n целых чисел. Не используя новый массив, нужно разместить элементы массива так,...

Вывести в порядке введения сначала все положительные числа последовательности, а затем отрицательные
из клавиатуры вводится непустая последовательность ненулевых целых чисел, которая заканчивается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.