GAECHKA
Твоя помощница в решении задач

Упорядочить по алфавиту значения двоичного файла, содержащего данные типа char

Здравствуйте! Очень нужна срочная помощь! Помогите написать программу к следующей задаче: Обмен элементов файла. Упорядочить по алфавиту значения двоичного файла, содержащего данные типа char. Одинаковые буквы, но с разными регистрами считать различными символами, все небуквенные символы расположить в конце файла.
Примечание: Результат работы с данными вывести на экран и в новый файл. Файл с входными данными имеет название INPUT.DAT для двоичных файлов. Файл, в который записывается результат, называется OUTPUT.TXT для текстовых файлов. При необходимости можно использовать временный файл для хранения промежуточных результатов.

Добавлено через 19 минут
Пожалуйста, помогите хоть кто-нибудь, я в отчаянии!
0
вопрос задан

Источник


2 ответа
begin
  var(p,d):=(New Dictionarychar,integer>,New Dictionarychar,integer>);
  foreach var c in ReadAllText('input.dat') do
    if Char.IsLetter(c) then
      d[c] := d.Get(c) + 1
    else if Not Char.IsControl(c) then
      p[c] := p.Get(c) + 1;
  var s:=d.OrderBy(v->v.Key).Select(v->v.Key*v.Value).JoinIntoString('')+
    p.Select(v->v.Key*v.Value).JoinIntoString('');
  s.Println;
  WriteAllText('output.txt',s);
end.
Спасибо большое! Всё работает
А можно её попроще написать? Я просто учусь только на первом курсе, и мы пока не проходили такое решение, которое Вы прислали. Боюсь, преподаватель просто не примет его

Добавлено через 4 часа 4 минуты
var 
  f1,f2:text; 
  i,j: integer;
  t: char;
  words1,words2: set of char;
  a,b,c,d:string;
begin 
  assign(f1,'C:\Users\USER\Desktop\INPUT.dat'); 
  assign(f2,'C:\Users\USER\Desktop\OUTPUT.txt'); 
  reset(f1); 
  rewrite(f2); 
 
  words1:=['A'..'Z'];
  words2:=['a'..'z'];
  
  a:='';
  b:='';
  while not eof(f1) do 
  begin 
   readln(f1,b); 
   a:=a+b;
  end;
  
  b:='';
  c:='';
  d:='';
  for i:= 1 to length(a) do
  begin
    if a[i] in words1 then
    begin
      b:=b+a[i];
    end
    else
    if a[i] in words2 then
    begin
      c:=c+a[i];
    end
    else
    begin
      d:=d+a[i];
    end;
  end;
  
  for i:= 1 to length(b)-1 do
    for j:=i+1 to length(b) do
      if b[i]>b[j] then
      begin
        t:=b[i];
        b[i]:=b[j];
        b[j]:=t;
      end;
      
  for i:= 1 to length(c)-1 do
    for j:=i+1 to length(c) do
      if c[i]>c[j] then
      begin
        t:=c[i];
        c[i]:=c[j];
        c[j]:=t;
      end;
      
  a:=b+c+d;
  writeln(f2,a);
  
  close(f1); 
  close(f2);
  writeln ('Полученный файл: ',a);
end.
Добавлено через 2 минуты
Написала сама, вдруг кому-то понадобится!