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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2009, 19:20   #1
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию Составить программу, которая читает произвольный текст

Цитата:
Составить программу, которая читает произвольный текст (5 строк по 40 символов) и распечатывает в алфавитном порядке все латинские буквы; входящие в этот текст.
Как распечатать в алфавитном порядке? Помогите
Doublefaced вне форума Ответить с цитированием
Старый 15.06.2009, 19:25   #2
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

Добавить все символы в множество, потом вывести его элементы
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 15.06.2009, 19:54   #3
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Код:
var
c:char
s,sd:set of char;
begin
s:=[];
sd:=[];
repeat
read(c);
if c in s then
sd:=s+[c];
for c:=#33 to #255 do
if (c in s) then
write(c);
readln;
end;
Начало примерно такое, это без текстового файла
Doublefaced вне форума Ответить с цитированием
Старый 15.06.2009, 20:00   #4
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

что-то вроде такого
Код:
var
	f:text;
	s:string;
	x:set of char;
	i:byte;
	c:char;
begin
	x := [];
	assign(f,'in.txt');
	reset(f);
	while not(eof(f)) do begin
		readln(f,s);
		for i:=1 to length(s) do
			x := x + [s[i]];
	end;
	for c:='a' to 'z' do
		if (c in x) then
			write(c:2);
	readln;
end.
если в текст входят не только латинские символы, ну там цифры или спецсимволы, можно завести еще множество.. к примеру a := ['a'..'z']; и там проверять во вложенном цикле
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 15.06.2009, 20:05   #5
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Спасибо, работает.
Doublefaced вне форума Ответить с цитированием
Старый 20.06.2009, 08:42   #6
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

А как сделать, чтобы выводило все буквы, то есть:

Pascal
a a c l p s
Doublefaced вне форума Ответить с цитированием
Старый 20.06.2009, 14:11   #7
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

1. Заводишь массив размера = количество букв в лат. алфавите.
2. Первоначально в массиве нули.
3. Идешь по строке. Для i-го символа. Из кода этого символа вычитаешь код буквы "a", получаешь индекс в массиве. Увеличиваешь значение элемента с этим индексом на 1.
4. В результате, получаем массив встречаемости символов.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 20.06.2009, 17:15   #8
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var  f:text;
     var i,j,k:integer;
     m:array[1..1000] of char;
     x:char;
     s:string;
begin
       assign(f,'in.txt');
        reset(f);
        k:=0;
while not(eof(f)) do
  begin
     readln(f,s);
     for i:=1 to length(s) do
     if s[i] in ['A'..'Z','a'..'z'] then

       begin
         k:=k+1;
         m[k]:=s[i];
       end;
  end;
for i:=1 to k-1 do
for j:=i+1 to k do
if m[i]>m[j] then
begin
    x:=m[i];
    m[i]:=m[j];
    m[j]:=x;
  end;
writeln('Bykvy po alfavitu:');
for i:=1 to k do
write(m[i],' ');
readln;
end.
Doublefaced вне форума Ответить с цитированием
Старый 20.06.2009, 17:31   #9
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Зачем массивы?

Код:
For x := 1 To 26 Do 
For y := 1 To Length(Stroka) Do If Stroka[y] = ABC[x] Then Write(Stroka[y]);
(писал прям в браузере)
Смысл такой. ABC - множество a, b, c, d .....
В двойном цикле. Первый цикл перебирает множество ABC (вроде в латинском 26 букв, но это не принципиально) второй цикл бегает от начала строки до конца и ищет совпадение. Как только оно найдено он выводит эту букву на экран. Дойдя до конца строки берётся следующая буква из ABC.....
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 20.06.2009, 18:28   #10
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

Цитата:
Сообщение от Вавел из ГМТУ Посмотреть сообщение
Зачем массивы?

Код:
... If Stroka[y] = ABC[x] Then...
так получать доступ к элементам множества нельзя.. элементы во множестве не индексированы и уникальны, такая уж особенность типа... Вариант с массивом вроде бы неплохой, хранить в массиве кол-во букв, а в мн-ве - сами буквы... я пока лучше ничего не придумал.. хотя и не думал особо... только проснулся =)
Uguu~

Последний раз редактировалось __STDC__; 20.06.2009 в 18:30.
__STDC__ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу, которая запрашивает пароль Olesya2406 Помощь студентам 5 28.04.2015 17:20
Составить программу, которая создает и выводит на экран файл. STEELKUZNECOV Помощь студентам 1 30.05.2009 09:50
17 Составить программу, которая печатает таблицу умножения и сложения натуральных чисел в шестнадцатеричн OTLi4HO Общие вопросы C/C++ 1 16.01.2009 13:59
Составить программу которая будет сортировать все положительные элементы Wast Паскаль, Turbo Pascal, PascalABC.NET 1 22.12.2008 15:56
Составить процедуру, которая в задоном массиве С заменяет элементы Absent Помощь студентам 1 25.03.2008 23:11