• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Выводятся не все символы

Asya_inter

Новые
Регистрация
12 Янв 2015
Сообщения
71
Реакции
0
Баллы
0
Выводятся не все символы

Пожалуйста, подскажите! Не выводятся русские буквы, а так всё работает.
Код:
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.
 
Чем просматриваете текстовый документ? Кодировку менять пробовали? Прикрепите файлы input.txt и K3.txt к следующему сообщению.
Без содержимого файла input.txt сложно понять, почему что-то работает не так, как вы задумали.


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

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

Вложения

  • input.txt
    input.txt
    31 байт · Просмотры: 599
  • K3.txt
    K3.txt
    96 байт · Просмотры: 590
Ставьте Notepad++ и формируйте исходные файлы к заданиям с его помощью.
 
AlexZir, теперь это понятно стало. А подскажите как не кодировку файла подстроить под кодировку программы, а наоборот? То есть, что-то в коде значит нужно поменять? И возможно ли это? Теперь понятно, что можно через Notepad++. А что, если нет такого редактора и нет возможности его скачать (если предположить такую ситуацию). То как быть?
 
Это вполне возможно. В FreePascal есть функции преобразования кодировки текста. Смотрите справку, там все описано. И да, вам нужно будет внести изменения в код.
 
Спасибо! Попробую это осуществить! А на pascalABC.NET возможно? А то в таком виде, как было если запускать, то результат тот же.
 
Вот что по поводу 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.
 
Спасибо за информацию! Попробую - может получится.
 
Назад
Сверху