0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
1

За один просмотр файла вывести сначала все числа, меньшие а

22.12.2009, 19:22. Показов 1840. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, помогите написать программу. С меня вознаграждение в размере 100-150 рублей.
Условие таково:
Дано: type fr = file of real; f:fr; var a,b:real. За один просмотр файла f вывести сначала все числа, меньшие а, затем все числа, принадлежащие отрезку [a,b], затем все числа, большие b, сохраняя их взаимный порядок в каждой из указанных групп.
Обращаюсь так, потому что время поджимает. Зачетная неделя
Также необходима блок-схема.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2009, 19:22
Ответы с готовыми решениями:

Создать файл целых чисел. За один просмотр файла вывести на экран сначала все четные числа, а потом все нечетные
Помогите пожалуйста написать программу. Создать файл целых чисел. За один просмотр файла вывести на...

За один просмотр файла напечатать сначала все однозначные числа, затем двузначные
Доброе время суток всем Вот задача (Паскаль)Сформировать файл из натуральных чисел и с помощью...

Напечатать элементы файла f в следующем порядке: сначала – все числа, меньшие a, затем – все числа из отрезка
Пмоогите пожалуйста написать программный код: Используя очередь, решить следующую задачу. TYPE...

Напечатать элементы файла: сначала – все числа, меньшие а, затем – все числа из отрезка
За один просмотр файла целых чисел напечатать элементы файла в следующем порядке: сначала – все...

15
3310 / 1372 / 110
Регистрация: 28.04.2009
Сообщений: 4,822
22.12.2009, 19:33 2
вам тогда сразу в раздел фриланс.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
22.12.2009, 19:48  [ТС] 3
Спасибо. Не знал про существование данного раздела.
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
22.12.2009, 20:09 4
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
program prg;
uses crt;
var
    output: file of real;
    input: TEXT;
    a,b: real;
    filename: string;
    x: real;
    greterB,inAB:array[1..50] of real;
    i,j,k: integer;
    ansver: char;
 
begin
     writeln('Rewrite/create file.rl from test.txt? y/n');
     readln(ansver);
 
     writeln('Input a, b');
     write('a=');readln(a);
     write('b=');readln(b);
 
     assign(output,'test.rl');
     assign(input,'test.txt');
 
     if ansver ='y' then begin
 
        rewrite(output);
        reset(input);
 
        while not eof(input) do begin
              readln(input,x);
              write(output,x);
        end;
        close(input);
     end;
     reset(output);
     i:=0;{index for greterB }
     j:=0;{index for inAB}
     writeln('x < a');
     while not eof(output) do begin
           read(output,x);
           if x < a then writeln(x);
           if (x >= a) and (x <= b) then begin
              inAB[j]:=x;
              j:=j+1;
           end;
           if x > b then begin
              greterB[i]:=x;
              i:=i+1;
           end;
     end;
     writeln('x in [a..b]');
     for k:=1 to j do writeln(inAB[k]);
     writeln('x > b');
     for k:=1 to i do writeln(greterB[k]);
     close(output);
     readkey;
end.
test.txt
Код
-45.235
25.129
7.3
-2.6427
757.26
60
0
731.25
-8.895
5.21
-23.2125
1.12
7
Вложения
Тип файла: txt test.txt (87 байт, 25 просмотров)
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
22.12.2009, 20:19  [ТС] 5
Елки-палки, я так скоро и в Деда Мороза поверю

Aye Aye, спасибо огромное. Осталось разобраться, как это работает.
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
22.12.2009, 20:38 6
output: file of real; выходной файл где числа записаны в виде real
input: TEXT; входной текстовый файл, где записаны числа в виде текста.
a,b: real; границы интервала
filename: string; это не надо, зыбыл удалить
x: real; считываемое из файла очередное значение
greterB,inAB:array[1..50] of real; массивы со считанными числами
i,j,k: integer;просто счетчики для массивов.
ansver: char;выбор пользователя. насчет перезаписи файла.

алгоритм такой:
сначал узнаем у пользовател надо ли создать/переписать файл с real.
если надо то открывем файл файл с текстом и переписываем из него числа в файл с real

проходим по файлу считывая чило:
если оно меньше, а то можно его вывести прямо сейчас не занося ни в какой массив.
если оно принадлежин интервалу от а до b, то запишим его в массив_числе_в_интревале.
если оно больше b, то записываем его в массив_чисел_больше_b.

выводим массивы на экран.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
22.12.2009, 22:34  [ТС] 7
Блин, не могу понять. Он создает новый файл в директории паскаля, но ничего в него не вписывает и ничего не выводит на экран. Вернее выводит следующее:
x < a
x in [a..b]
x > b
Кстати, на предложение создать новый файл, программа что на да, что на нет реагирует одинаково.
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
23.12.2009, 18:18 8
Cам этот test.txt файл делал? Сдается мне что ты пустой файл проге подсунул.
Мой файл test.txt, тот что прикреплен к посту с прогой, пробовал?

в файле действительне числа длжны быть встолбик записаны.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
23.12.2009, 22:53  [ТС] 9
Aye Aye, все, разобрался. Замечательно работает.
Не могли бы Вы мне подсказать, в каком месте нужно добавить формат вывода (0:2 к примеру), что не могу понять.
И подскажите еще, это нормально, что в выходном файле цифры записаны в виде таких иероглифов: †
ЧЈрґ…й&1Iѓљ™™™i‚I.я!©Љ
ЧЈP=† p Љ Р6„…лQЋѓ…лQё&…333і№ЃГх(\ѓ ` ?
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
24.12.2009, 09:14 10
формат вывода чисел в Паскале:
writeln(переменная:число_знаком_до_запятой:число_знаков_после_запятой);
пример:
X=151451.12411612;
writeln(X:4:2);
на экране будет:
1451.12

а насчет белеберды в выходном фйле: у тебя же выходной файл не текстовый, а файл действительных! чисел (по заданию так)!! сответственно там не символы (буквы) хранятся а числа типа real (действительные).

в тесктовомфайле на один символ - один байт.
а на одно real число надо 6 байт.
в файле real чисел находятся группы по 6 байт, каждая из которых - real число.
когда блокнот или еще какой нибудь редактор открывает такой файл он пытается прочитать его как текстовый файл т. е. файл где один байт - один элемент (буква). но у нас то там 6 байт - один элемент (действительное число).
0
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
24.12.2009, 10:51 11
Цитата Сообщение от Aye Aye Посмотреть сообщение
writeln(переменная:число_знаком_до_запятой:число_з наков_после_запятой);
пример:
X=151451.12411612;
writeln(X:4:2);
на экране будет:
1451.12
одна мелкая поправка
write(переменная: ЧислоЗнаковВсего (на целую и дробную часть, включая десятичную точку): число знаков после запятой);
если числаЗнаковВсего мало на вывод переменной, то это число проигнорируется и напечатается сколько надо.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
24.12.2009, 20:42  [ТС] 12
Большое спасибо вам, господа. Во всем разобрался, программа работает корректно.

Добавлено через 1 час 48 минут
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
program prg;
label cv;
var
    output: file of real;
    input: TEXT;
    a,b: real;
    filename: string;
    x: real;
    greterB,inAB:array[1..50] of real;
    i,j,k: integer;
    ansver,y,n: char;
 
begin
     assign(output,'test.rl');
     assign(input,'test.txt');
     writeln('Rewrite/create file.rl from test.txt? y/n');
     readln(ansver);
     if ansver ='n' then writeln('Press Enter for exit') and goto cv else
     if ansver ='y' then begin
        writeln('Input a, b');
     write('a=');readln(a);
     write('b=');readln(b);
 
        rewrite(output);
        reset(input);
 
        while not eof(input) do begin
              readln(input,x);
              write(output,x);
        end;
        close(input);
     end;
     reset(output);
     i:=0;{index for greterB }
     j:=0;{index for inAB}
     writeln('x < a');
     while not eof(output) do begin
           read(output,x);
           if x < a then writeln(x:0:2);
           if (x >= a) and (x <= b) then begin
              inAB[j]:=x;
              j:=j+1;
           end;
           if x > b then begin
              greterB[i]:=x;
              i:=i+1;
           end;
     end;
     writeln('x in [a..b]');
     for k:=1 to j do writeln(inAB[k]:0:2);
     writeln('x > b');
     for k:=1 to i do writeln(greterB[k]:0:2);
     close(output);
     cv:
     readln
     end.
Товарищи, я решил тут еще немного поизвращаться над этой программкой. Дело в том, что в начале, когда она запрашивает переписать файл? y/n, на n не предусмотрено ничего, и программа все равно выполняет всю работу.
В общем попытался с помощью меток и if это исправить, а компилятор настоятельно ругается на and. Прошу, объясните мне несведущему, как это правильно сделать.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
25.12.2009, 23:13  [ТС] 13
[QUOTE=Fake_Man;439504]Большое спасибо вам, господа. Во всем разобрался, программа работает корректно.

Добавлено через 1 час 48 минут
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
program prg;
label cv;
var
    output: file of real;
    input: TEXT;
    a,b: real;
    filename: string;
    x: real;
    greterB,inAB:array[1..50] of real;
    i,j,k: integer;
    ansver,y,n: char;
 
begin
     assign(output,'test.rl');
     assign(input,'test.txt');
     writeln('Rewrite/create file.rl from test.txt? y/n');
     readln(ansver);
     if ansver ='n' then writeln('Press Enter for exit') and goto cv else
     if ansver ='y' then begin
        writeln('Input a, b');
     write('a=');readln(a);
     write('b=');readln(b);
 
        rewrite(output);
        reset(input);
 
        while not eof(input) do begin
              readln(input,x);
              write(output,x);
        end;
        close(input);
     end;
     reset(output);
     i:=0;{index for greterB }
     j:=0;{index for inAB}
     writeln('x < a');
     while not eof(output) do begin
           read(output,x);
           if x < a then writeln(x:0:2);
           if (x >= a) and (x <= b) then begin
              inAB[j]:=x;
              j:=j+1;
           end;
           if x > b then begin
              greterB[i]:=x;
              i:=i+1;
           end;
     end;
     writeln('x in [a..b]');
     for k:=1 to j do writeln(inAB[k]:0:2);
     writeln('x > b');
     for k:=1 to i do writeln(greterB[k]:0:2);
     close(output);
     cv:
     readln
     end.
Добавлено через 3 минуты
Помогите пожалуйста разобраться с одним нюансом. Мне забраковали эту лабу, сославшись на то, что в программе не используются ссылки(лаба на ссылочные типы). Может кто-нибудь объяснить принцип действия программы в таком случае? Ибо мне совсем непонятно каким образом и вообще зачем здесь нужны динамические структуры.
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
25.12.2009, 23:18 14
а что конкретно спросил препод? Что он сказал сделать? Дословно пожалуйста . А то так совсем не очевидно что имеется ввиду.
0
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 32
26.12.2009, 10:38  [ТС] 15
"Задача решена верно, но необходимо (по заданию лабы) использовать динамические структуры, в данном случае списки."
Ну как я понимаю, после считывания информации из первого файла, каждому числу нужно присвоить свое место(ссылку) и потом, ориентируясь на ссылки, вывести информацию на экран. Но это как я понял, поправьте меня, если я не прав.
0
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
26.12.2009, 11:58 16
что же ты раньше не сказал? Или мне должно быть очевидно что от тебя преод требует? Налицо полная безолаберность. Берись за ум! разбираться в проге сам будешь.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
program prg;
uses crt;
type
    ptrnode=^node;
    node=record
               info: real;
               next: ptrnode;
    end;
 
procedure push(var l:ptrnode;x:real);
begin
     if l=nil then begin
        new (l);
        l^.info:=x;
        l^.next:=nil;
     end else push(l^.next,x);
end;
 
procedure print(l:ptrnode);
begin
     if l <> nil  then begin
        writeln(l^.info);
        print(l^.next);
     end;
end;
 
procedure delete(l:ptrnode);
begin
     if l<>nil then begin
        delete(l^.next);
        dispose(l);
     end;
end;
 
function get(l:ptrnode;i:integer):real;
begin
     if (l <> nil) and (i=1) then begin
        get:=l^.info;
     end else
     if l <> nil then get:=get(l^.next,i-1);
end;
 
var
    output: file of real;
    input: TEXT;
    a,b: real;
    filename: string;
    x: real;
    greterB,inAB:array[1..50] of real;
    i,j,k: integer;
    ansver: char;
    list: ptrnode;
begin
     clrscr;
     writeln('Rewrite/create file.rl from test.txt? y/n');
     readln(ansver);
 
     writeln('Input a, b');
     write('a=');readln(a);
     write('b=');readln(b);
 
     assign(output,'test.rl');
     assign(input,'test.txt');
 
     if ansver ='y' then begin
 
        rewrite(output);
        reset(input);
 
        while not eof(input) do begin
              readln(input,x);
              write(output,x);
        end;
        close(input);
     end;
     reset(output);
     i:=0;{index for greterB }
     j:=0;{index for inAB}
     while not eof(output) do begin
           read(output,x);
           push(list,x);
           i:=i+1;
     end;
     close(output);
     print(list);
     writeln('----------------------');
     writeln('x <= a');
     for j:=1 to i do begin
         x:=get(list,j);
         if x < a then writeln(x);
     end;
 
     writeln('x in [a..b]');
     for j:=1 to i do begin
         x:=get(list,j);
         if (x >= a) and (x<=b)then writeln(x);
     end;
 
     writeln('x >= b');
     for j:=1 to i do begin
         x:=get(list,j);
         if x >= b then writeln(x);
     end;
 
     delete(list);
     readkey;
end.
1
26.12.2009, 11:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2009, 11:58
Помогаю со студенческими работами здесь

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

За 1 просмотр файла вывести сначала числа меньше а, потом числа из промежутка а b, затем, числа больше b
Дан файл с числами типа float, пользователь вводит 2 числа а и b, за 1 просмотр файла нужно вывести...

Используя один просмотр текстового файла, вывести сначала содержащиеся в нем цифры, затем остальные символы.
Указатели: 1) Используя один просмотр текстового файла, вывести сначала содержащиеся в нем цифры,...

Используя один просмотр текстового файла, вывести сначала содержащиеся в нем цифры, а затем остальные символы
Здравствуйте, сегодня на паре посоветовали обратиться на этот сайт за помощью. В понедельник...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru