Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Выводятся не все символы (http://www.tehnari.ru/f41/t104010/)

Asya_inter 28.08.2015 13:00

Выводятся не все символы
 
Пожалуйста, подскажите! Не выводятся русские буквы, а так всё работает.
Код:

var
  f2,f:text;
  c:char;
  s:array[char] of integer;
begin
  assign(f,'input.txt');
  reset(f);
 
  while not eof(f) do begin
    while not eoln(f) do begin
    read(f,c);
    s[c]:=s[c]+1;
    end;
    readln(f);
  end;
  assign(f2,'K3.txt');
  Rewrite(f2);
 
  for c:=#0 to #255 do
    if s[c]<>0 then writeln(f2,c:4,':',s[c]);
 
  close(f);
  close(f2);
  end.


AlexZir 28.08.2015 13:16

Вложений: 2
Чем просматриваете текстовый документ? Кодировку менять пробовали? Прикрепите файлы input.txt и K3.txt к следующему сообщению.
Без содержимого файла input.txt сложно понять, почему что-то работает не так, как вы задумали.


Насколько я понял, программа считает сколько раз каждый символ встречается в тексте. Тут опять таки проблема может быть в кодировке текста, если используется не ASCII, то в массив просто не попадут символы русского алфавита, так как их номера в кодовой таблице имеют значение больше 255.

Вот примеры текстовых файлов в кодировке CP866, которая подходит к вашему листингу:
Вложение 237961
Вложение 237962
Собственно, все правильно считается, если правильно задачу перед машиной ставить.
Создать исходный файл в нужной кодировке можно как при помощи самого FreePascal, так и программой Notepad++.

Asya_inter 28.08.2015 13:56

Вложений: 2
Спасибо! Сейчас попробую разобраться. А вот, вводимые мной данные файлы:

AlexZir 28.08.2015 13:58

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

Asya_inter 28.08.2015 14:02

AlexZir, теперь это понятно стало. А подскажите как не кодировку файла подстроить под кодировку программы, а наоборот? То есть, что-то в коде значит нужно поменять? И возможно ли это? Теперь понятно, что можно через Notepad++. А что, если нет такого редактора и нет возможности его скачать (если предположить такую ситуацию). То как быть?

AlexZir 28.08.2015 14:04

Это вполне возможно. В FreePascal есть функции преобразования кодировки текста. Смотрите справку, там все описано. И да, вам нужно будет внести изменения в код.

Asya_inter 28.08.2015 14:08

Спасибо! Попробую это осуществить! А на pascalABC.NET возможно? А то в таком виде, как было если запускать, то результат тот же.

AlexZir 28.08.2015 17:18

Вот что по поводу PascalABC.Net из справки:
Цитата:

Символьный тип char занимает 2 байта и хранит Unicode-символ. Символы реализуются типом System.Char платформы .NET.
Стандартные подпрограммы работы с символами представлены здесь.
Члены класса char приведены здесь.
Для преобразования между символами и их кодами в кодировке Windows (CP1251) используются стандартные функции Chr и Ord:
Chr(n) - функция, возвращающая символ с кодом n в кодировке Windows;
Ord(с) - функция, возвращающая значение типа byte, представляющее собой код символа c в кодировке Windows.
Для преобразования между символами и их кодами в кодировке Unicode используются стандартные функции ChrUnicode и OrdUnicode:
ChrUnicode(w) - возвращает символ с кодом w в кодировке Unicode;
OrdUnicode(с) - возвращает значение типа word, представляющее собой код символа c в кодировке Unicode.
Кроме того, выражение #число возвращает Unicode-символ с кодом число (число должно находиться в диапазоне от 0 до 65535).
Аналогичную роль играют явные преобразования типов:
char(w) возвращает символ с кодом w в кодировке Unicode;
word(с) возвращает код символа c в кодировке Unicode.


Asya_inter 28.08.2015 19:05

Спасибо за информацию! Попробую - может получится.


Часовой пояс GMT +4, время: 07:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.