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

За один просмотр файла и без использования дополнительных файлов вывести элементы файла f в указанном порядке

06.06.2018, 13:36. Показов 1834. Ответов 1
Метки нет (Все метки)

Если можете сделайте программу (сам пытался понять как делать но не получается +времени нет готовлюсь к экзамену)

За один просмотр файла f типа file of real и без использования дополнительных файлов вывести элементы файла f в следующем порядке: сначала все числа из отрезка [a,b] и затем все остальные числа сохраняя исходный взаимный порядок в каждой из этих трех групп чисел (a и b заданные числа a<b) P.S.если ещё с пояснениями напишите то цены вам нет

Добавлено через 19 часов 47 минут
Нашёл прогу но даже прочитав с пояснениями не могу понять как она работает ?
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
type 
  ptr = ^block;   //Создаем тип ptr , который является указателем на на структуру блок
  block = record    // block хранит в себе значение и указатель на следующий элемент 
    value: char;
    next: ptr;
  end;
 
var 
  head: ptr;      // Создаем начало и конец очереди (голова и хвост)
  treal: ptr;
 
procedure make_queue(var head: ptr;var treal: ptr;value: char); // процедура создания очереди
var
  elem: ptr;            
begin
  new(elem);          //Выделяем память 
  elem^.value := value;     //Присваеваем какое то значение 
  elem^.next := nil;
  head := elem;           //Голова и хвост равны одному и тому же элементу , когда всего один элемент в очереди 
  treal := elem;          //Представь себе очередь в магаз кто первый зашел , тот первый и вышел
end;
 
procedure add(var head: ptr;var treal: ptr;value: char);
var
  elem: ptr;          
begin
  new(elem);              //выделяем память под новый элемент 
  elem^.value := value;  //Присваеваем ему переданное значение 
  elem^.next := nil;        
  if head^.next = nil then    //Если до этого был один элемент в очереди
  begin
    head^.next := elem;     //Первый элемент указывает на добавленный сейчас
    treal := elem;      //И он же становиться хвостом
  end
  else 
  begin
    treal^.next := elem;      //Иначе мы ставим следующим от последнего элемента , добавленный 
    treal := elem;          //И делаем последним его
  end;
end;
 
function get(var head: ptr;var treal: ptr;var res: char):boolean;    //в эту функцию мы передаем помимо стэка переменную в которую запишем
var                                                                  //последний элемент очереди , если очередь не пуста
  elem: ptr;
begin
  if (head <> nil)then      //Тут все просто , пока бошка не пустая
  begin
    elem := head;       //присваеваем  созданнаму указателю первый элемент
    get := true;      //Возвращаем тру , если очередь не пуста
    res := head^.value; //Присваиваем значение
    head := head^.next;   //Делаем Первым элементом элемент стоящий за первым
    dispose(elem);      //Удаляем элемент , который был первым
  end;
end;
 
procedure simple(head: ptr;treal:ptr;namef: string;nameg: string);
var
  fout: text;                       //Создаем фаловую переменную
  fin: text;
  val: char;
  tr: ptr;                                        //и элемент очереди
begin
  assign(fin,namef);                        //привязываем переменную к файлу
  reset(fin);                                    //Открываем для чтения
  
  assign(fout,nameg);                     //Тут привязываем файл к переменной
  rewrite(fout);                         //создаем файл
  
  if not eof(fin) then                 //Пока не конец файла
    begin
      read(fin,val);                         //Создаем очередб из первого элемента файла
      make_queue(head,treal,val);
    end;
  
  while not eof(fin) do                    //Пока не цонец фала закидываю его элементы в очередь
  begin
    read(fin,val);
    add(head,treal,val);
    if (ord(val) = 10)or(ord(val) = 13) then      //Если встретился переход на новую строку
    begin
      tr := treal;                              //Сохраняю положение хвоста
      while(get(head,treal,val)) do       //Пока можно сичтать из очереди значение
      begin
        if (val <> '+')and(val <> '-')and(val <> '*') then     //Переписываю элементы не равные + - *
          write(fout,val)
        else add(head,treal,val);             //Выписываю элементы + * - обратно в очередь
     
        if(head = tr^.next) then break;   //Если мы добрались до элемента который был хвостом съебываем из цикла
      end;
      while get(head,treal,val) do      //Выводим Все оставшиеся элементы( те которые вернули в очередь) их порядок сохраняется, т.к. это очередь
          write(fout,val);
      writeln(fout,'');
    if not eof(fin) then                 //Пока не конец файла
    begin
      read(fin,val);                         //Создаем очередб из первого элемента файла
      make_queue(head,treal,val);
    end;
  end;
  end;
  
  if head <> nil then               //если голова не пустая(После последней строки нет перехода на следующую)
  begin
  tr := treal;   
    while(get(head,treal,val)) do       //Пока можно сичтать из очереди значение
       begin
         if (val <> '+')and(val <> '-')and(val <> '*') then     //выписываю элементы пренадлежащие интервалу
           write(fout,val)
         else add(head,treal,val);             //Иначе кидаю их обратно в очередь
      
         if(head = tr^.next) then break;   //Если мы добрались до элемента который был хвостом съебываем из цикла
       end;
       while get(head,treal,val) do      //Выводим Все оставшиеся элементы( те которые вернули в очередь) их порядок сохраняется, т.к. это очередь
           write(fout,val);
  end;
  close(fout);
  close(fin);
end;
 
begin
  simple(head,treal,'f.txt','g.txt');
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2018, 13:36
Ответы с готовыми решениями:

Используя один просмотр текстового файла, вывести его строки в обратном порядке
Собственно вот: используя один просмотр текстового файлаб вывести его строки в обратном порядке (в...

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

Очередь. За один просмотр файла без использования дополнительных файлов напечатать элементы файла в порядке
HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HELP!!!HE...

Без использования дополнительных файлов напечатать элементы файла F в заданном порядке
Из типизированного файла F , содержащего данные типа Real , за один просмотр и без использования...

1
0 / 0 / 1
Регистрация: 01.06.2018
Сообщений: 5
07.06.2018, 20:10  [ТС] 2
Сделал прогу сам не дождался
Скину её суда может когда нибудь она кому та да понадобится
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
108
109
110
111
program pr15_2;
type
 ElementofQueue=record
  Elem:real;
  NextElem:^ElementofQueue;
end;
Queue=^ElementofQueue;
procedure CreateQueue(var FirstElem,LastElem:Queue);//создание очереди
 begin 
  FirstElem:=nil;
  LastElem:=nil;
 end;
 
function QueueIsClear(var FirstElem,LastElem:Queue):boolean;//проверка очереди на пустоту 
 begin
  QueueIsClear:=(FirstElem=nil) and (LastElem=nil)
 end;
 
procedure IncludeInQueue(var FirstElem,LastElem:Queue;NewElem:real);//включение элемента в очередь
 var ServiceVar:Queue;
 begin
  new(ServiceVar);
  ServiceVar^.Elem:=NewElem;
  ServiceVar^.NextElem:=nil;
  if (FirstElem=nil) and (LastElem=nil) then 
   begin
    FirstElem:=ServiceVar;
    LastElem:=ServiceVar;
   end
  else 
   begin
    LastElem^.NextElem:=ServiceVar;
    LastElem:=ServiceVar
   end;
 end;
 
procedure SelectFromQueue(var FirstElem,LastElem:Queue;var result:real);//выбор элемента из очереди 
 var ServiceVar:Queue;
 begin
  if not ((FirstElem=nil) and (LastElem=nil)) then 
  begin
   Result:=FirstElem^.Elem;
   ServiceVar:=FirstElem;
   FirstElem:=FirstElem^.NextElem;
   if FirstElem=nil then
    LastElem:=nil;
    dispose(ServiceVar)
  end
end;
 
var 
 f:file of real;
 a,b,h,si,x: real;
 n,i,y:byte;
 p1,v1,p2,v2,p3,v3:Queue;
begin
 assign(f,'f.txt');
 rewrite(f);
 write('Введите кол-во чисел:');
 read(n);
 write('Введите числа:');
  for i:=0 to n-1 do
   begin
    read(h);
    write(f,h);
   end;
 
 write('Введите начало отрезка(a):');
 read(a);
 repeat
 write('Введите конец отрезка(b):');
 read(b);
 until b>a;
 
 reset(f);
 repeat
  if not eof(f) then begin
  read(f,x);
  if (a<=x) and (x<=b) then IncludeInQueue(p1,v1,x);
  if x<a then IncludeInQueue(p2,v2,x);
  if x>b then IncludeInQueue(p3,v3,x);
end;
  until eof(f);
  rewrite(f);
  while not QueueIsClear(p1,v1) do
   begin
  SelectFromQueue(p1,v1,x); 
  write(f,x);
   end; 
  while not QueueIsClear(p2,v2) do
   begin
  SelectFromQueue(p2,v2,x);
  write(f,x);
   end;
  while not QueueIsClear(p3,v3) do
   begin
  SelectFromQueue(p3,v3,x);
  write(f,x);
   end;
 
 write('Ваши числа:');
 si:=filesize(f);
 y:=0;
 repeat
  seek(f,y);
  read(f,x);
  write(x:2,' ');
  inc(y,1);
 until y>=si;
 close(f);
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2018, 20:10
Помогаю со студенческими работами здесь

Удалить числа из файла, без использования дополнительных массивов и файлов
Всем привет, насколько я понимаю, само удаление из файла и не удаление вовсе, открываем файл и...

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

С помощью очереди за один просмотр файла напечатать элементы файла в заданном порядке
Сформировать файл из вещественных чисел и с помощью очереди за один просмотр файла напечатать...

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


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

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

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