Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2013, 20:13   #21
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Так-с.. Мой вариант, работает (у меня) с английским и русским алфавитами..
Изначальна была идея сделать массив
Код:
array ['A'..'Z', 'А'..'Я', 'Ё'] of Integer
Она потерпела крах..
Затем пробовала установить границы массива строкой - тоже поражение..
Пришлось делать так..
Код:
const
        Let = 'ABCDEFGHJKLMNOPQRSTVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';

type

        TLet = array [1..Length(Let)] of Integer;

function UpCase (ch : Char) : Char;

begin
	case ch of
               'а'..'п' : Dec (ch, 32);
	       'р'..'я' : Dec (ch, 80);
               'ё'      : ch := 'Ё';

        else
                ch := System.UpCase (ch)

        end;

	UpCase := ch
end;

var
        f : text;
        CountOfLet : Integer;
        ArrayOfLet : TLet;
        s : string;
        i, t : Integer;

begin
        Assign (f, 'input.txt');
        Reset (f);

        for i := 1 to Length(Let) do
                 ArrayOfLet[i] := 0;

        CountOfLet := 0;

        while not EoF (f) do begin
                ReadLn (f, s);
                for i := 1 to Length(s) do begin
                        t := Pos(UpCase(s[i]), Let);
                        if t <> 0 then begin
                                Inc (CountOfLet);
                                Inc (ArrayOfLet[t])
                        end
                end

        end;

        for i := 1 to Length(Let) do
                WriteLn (Let[i], ' ', ArrayOfLet[i] / CountOfLet : 0 : 3)

end.
Не у кого не идей как всё-таки можно впихнуть строку в массив (поясняю : Каким махинациями можно сделать примерно так :
Код:
Код:
const 
      s = 'ABC';

type
      TArr = array [s[1]..s[3]] of Integer
)

Последний раз редактировалось Poma][a; 15.04.2013 в 20:46.
Poma][a вне форума Ответить с цитированием
Старый 15.04.2013, 20:28   #22
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

Цитата:
как всё-таки можно впихнуть строку в массив
Мне кажется, что это невозможно
Во втором случае все вроде бы выглядит нормально

Код:
TArr = array ['A'..'C'] of Integer
Зато во втором
Код:
TArr = array ['A'(латинская)..'Я'(русская)] of Integer;
И в конце концов мы получим не то, что нам нужно.

Но для меня все-таки загадка, почему этот код не компилируется, ведь строка константная, символы известны во время прекомпиляции, почему бы компилятору не подставить их в объявление массива? Может кто разъяснить?
PathTheir вне форума Ответить с цитированием
Старый 15.04.2013, 20:30   #23
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Каким махинациями можно сделать примерно так :
А можно по-русски - что именно нужно сделать?
s-andriano вне форума Ответить с цитированием
Старый 15.04.2013, 20:33   #24
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

s-andriano
Насколько я понял, сделать массив такого вида
Код:
array ['A', 'B', 'C'] of Integer;
или
array ['A', 'B', ... 'Я'] of Integer;
чтобы в качестве индексов были символы строки (константной)
PathTheir вне форума Ответить с цитированием
Старый 15.04.2013, 20:35   #25
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Код:
array ['A', 'B', ... 'Я'] of Integer;
33-мерный массив?
Боюсь, на такой памяти не хватит.

вот это:
Код:
a : array [#0..'A', #0..'B', #0..'ß'] of Integer;
ошибок не обнаруживает.

Последний раз редактировалось s-andriano; 15.04.2013 в 20:37.
s-andriano вне форума Ответить с цитированием
Старый 15.04.2013, 20:37   #26
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
33-мерный массив?
Боюсь, на такой памяти не хватит.
Нет. Самый обычный одномерный массив. НО его индексы должны быть s[1], s[2], s[3], .., s[Length(s)], где s - строка, описанная в const
Poma][a вне форума Ответить с цитированием
Старый 15.04.2013, 20:41   #27
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
a : array [#0..'A', #0..'B', #0..'ß'] of Integer;
Трехмерный массив.
Poma][a вне форума Ответить с цитированием
Старый 15.04.2013, 20:45   #28
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Индексы в массиве могут идти исключительно подряд.
Это особенность массива и ее никак изменить нельзя, не меняя саму структуру данных.
Но можно использовать два массива - один для "перекодировки" другого.

Цитата:
где s - строка, описанная в const
Код:
var 
 Let = : string = 'ABCDEFGHJKLMNOPQRSTVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
 LetByte : array[0..255]of byte absolute Let;
Так можно только при условии совпадения длин элементов.
s-andriano вне форума Ответить с цитированием
Старый 15.04.2013, 20:53   #29
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
var
        Let : string = 'ABCDEFGHJKLMNOPQRSTVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
        LetByte : array [1..255] of Byte absolute Let;

begin
        WriteLn (LetByte [1])
end.
Вот так не ругается.. Но опять же индекс - число..
Цитата:
Так можно только при условии совпадения длин элементов.
Каких элементов? Byte и Let ?
Poma][a вне форума Ответить с цитированием
Старый 15.04.2013, 20:56   #30
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

Да, вы меня опередили.
При использовании absolute мы получаем массив с индексами в виде чисел и с содержимым в виде того, чего мы указали (Let в нашем случае).

Так можно только при совпадении размера массива и длины Let, и размера элемента строки- Byte и типа данных в массиве, в нашем случае, однако это проблему не решает.

Последний раз редактировалось PathTheir; 15.04.2013 в 21:00.
PathTheir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать программу определяющую частоту появления каждого байта в файле. BadGuy Помощь студентам 1 02.04.2012 23:31
Из текста удалить все вхождения некоторого наперед заданного символа и символ, стоящий в тексте перед ним LittleStudent Помощь студентам 1 15.04.2011 00:46
Для каждого из слов указать, сколько раз оно встречается в тексте.(paskal) INZA Помощь студентам 1 14.12.2010 10:25
Найти (в процентах) частоту появления каждого из m наиболее часто встречающихся элементов sk1p Паскаль, Turbo Pascal, PascalABC.NET 2 26.09.2008 23:57
В чем проблема появления символа & в начале каждого заголовка итема созданного в рунтайте раздела меню? SkAndrew Общие вопросы Delphi 17 10.08.2008 21:44