Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] символы


Автор: luna 12.5.2007, 19:10
Дан массив слов. Вывести буквы, которые не используются в словах данного массива.


---------------------
Помогите пожалуйста..

Автор: Klin 12.5.2007, 23:28
Вариантов много. Вот первый:
Код

uses CRT; { библиотека для очистки экрана } 
var n: string;
    i: integer;
begin
 clrscr; { очистка экрана }
 n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс }
 writeln('text: ',n); writeln; { выводим его}
 for i:=65 to 241 do
  if ( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223) and (Pos(chr(i),n)<1)  then write(chr(i),chr(32));
  { проверяем каждый символ на наличие, если нет - выводим на экран }
end.


Добавлено @ 23:35
или так:
Код

uses CRT; { библиотека для очистки экрана } 
var n,DataRus, DataEng: string; { n - наша строка массив; DataRus и DataEng - алфавит из которого будем проверять символы }
    i: integer;
begin
 clrscr; { очистка экрана }
 DataEng :='qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'; { английский алфавит }
 DataRus :='йцукенгшщщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ'; { русский алфавит }
 n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс } 
  writeln('text: ',n); writeln; { выводим его}
 for i:=1 to Length(DataEng) do if Pos(DataEng[i],n)<1 then write(DataEng[i],chr(32)); 
 for i:=1 to Length(DataRus) do if Pos(DataRus[i],n)<1 then write(DataRus[i],chr(32)); 
  { проверяем каждый символ на наличие, если нет - выводим на экран }
end.


Этот легче, но с кодами будет эфектней smile

Добавлено @ 23:37
Да, забыл сказать, что коды для русской клавы под ДОС: 128-175 и 224 - 241

Автор: luna 18.5.2007, 15:49
n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс }

как это понять?

Автор: Rodman 18.5.2007, 15:58
luna, это произошло когда Klin копировал из компилятора кириллицу... там можешь написать любой текст кириллицей!

Автор: luna 18.5.2007, 16:10
записала 1 вариант, не работает...не чего не пишет, и только быстро мелькает алфавит....
может еще где-то надо дописать?
Мне кажется это из-за ввода текста, как его подругому можно ввести, а то строка n:='''waraЊr rkalr ateltk';
вызывает подозорение у  меня очень...

Автор: Rodman 18.5.2007, 16:19
Добавь перед последним end. следующее
Код

readln;

т.е. у тебя должно получиться

Код

readln;
end.

Автор: luna 18.5.2007, 16:29
а как вводить слова? ведь на экране даже не чего вводить не получается

Автор: Misha_White 18.5.2007, 16:29
Rodman, 
А ни кому не бросилось в глаза, что дан Массив слов? Или это не важно?

Автор: Rodman 18.5.2007, 16:30
Код

uses CRT; { библиотека для очистки экрана } 
var n: string;
    i: integer;
begin
 clrscr; { очистка экрана }
 readln(n); {вот тут считываешь символы с клавиатуры}
 {n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс }
 writeln('text: ',n); writeln; { выводим его}
 for i:=65 to 241 do
  if ( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223) and (Pos(chr(i),n)<1)  then 
     write(chr(i),chr(32));
  { проверяем каждый символ на наличие, если нет - выводим на экран }
 readln;
end.

Автор: luna 18.5.2007, 16:31
ну хоть кто-то меня понял...
ввод слов как одномерный массив

Автор: Rodman 18.5.2007, 16:32
Misha_White, string сам по себе массив... как Klin понял, так и написал...

т.е. как задан вопрос, такой ответ...

Автор: luna 18.5.2007, 16:34
Например:
вводим:

мама папа слон треугольник
------
выводит буквы алфавита, которые не исупользуются в этих словах....

Автор: Rodman 18.5.2007, 16:35
Цитата(luna @  18.5.2007,  15:31 Найти цитируемый пост)
ввод слов как одномерный массив 

Код

uses CRT; { библиотека для очистки экрана } 
const M=10;
var n:array[1..M] string;
    i,j: integer;
begin
 clrscr; { очистка экрана }
 for i:=1 to M do 
 readln(n[i]); {вот тут считываешь символы с клавиатуры}
 {n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс }
 for i:=1 to M do 
 writeln(' ',n[i]); 
 writeln; { выводим его}
for j:=1 to M do 
 for i:=65 to 241 do
  if ( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223) and (Pos(chr(i),n[j])<1)  then 
     write(chr(i),chr(32));
  { проверяем каждый символ на наличие, если нет - выводим на экран }
 readln;
end.

Автор: Misha_White 18.5.2007, 16:36
Rodman, 
Ну я знаю, что String -массив... Но обычно в задачах пишут строка слов разделеннх пробелом(запятой и т.п.) либо набор слов(при этом подразумевается, что разработчик сам решает как хранить слова), а тут ясно сказано, что это - массив! smile 

Автор: luna 18.5.2007, 16:44
Код

uses CRT; { библиотека для очистки экрана } 
const M=10;
var n:array[1..M] string;
    i,j: integer;
begin
 clrscr; { очистка экрана }
 for i:=1 to M do 
 readln(n[i]); {вот тут считываешь символы с клавиатуры}
 {n:='waraЊr rkalr ateltk'; { любым способом добавляем тектс }
 for i:=1 to M do 
 writeln(' ',n[i]); 
 writeln; { выводим его}
for j:=1 to M do 
 for i:=65 to 241 do
  if ( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223) and (Pos(chr(i),n[j])<1)  then 
     write(chr(i),chr(32));
  { проверяем каждый символ на наличие, если нет - выводим на экран }
 readln;
end.

------------------------
у вас это работает?
у меня нет....


M
Rodman
Используйте подсветку синтаксиса!


Автор: Rodman 18.5.2007, 16:49
Код

uses CRT; { библиотека для очистки экрана } 
const M=10;
var n:array[1..M] of string;
    i,j: integer;
begin
 for i:=1 to M do
    readln(n[i]); 
 for i:=1 to M do
    writeln(' ',n[i]);
 writeln; 
for j:=1 to M do
begin
 writeln('В ',j,'-ой строке'); 
 for i:=65 to 241 do
  if ( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223) and (Pos(chr(i),n[j])<1))  then
     write(chr(i),',');
 writeln; 
 end;
 readln;
end.

у меня такое работает

Автор: Misha_White 18.5.2007, 16:51
luna, 
Ругается при компиляции или работает неправилно?

Автор: luna 18.5.2007, 17:00
выводит такое, что даже словами не описать....если работает, скиньте плиз файл....

Автор: Misha_White 18.5.2007, 17:10
luna,  Попробуй то, что предложил Rodman! У тебя код неправильный!!!

Автор: luna 18.5.2007, 17:16
ну не работает, вот скачайте....его вариант....он вводит и нечиго не выводит...

Автор: Misha_White 18.5.2007, 17:28
luna, 
И правда! Вот исправил... но там еще надо всякие рамки исключить... посмотри их коды и убери из If...

Код

uses CRT; { библиотека для очистки экрана } 
const M=10;
var n:array[1..M] of string;
    i,j: integer;
begin
 for i:=1 to M do
    readln(n[i]); 
 for i:=1 to M do
    writeln(' ',n[i]);
 writeln; 
for j:=1 to M do
begin
 writeln('В ',j,'-ой строке'); 
 for i:=65 to 241 do
  if (( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223)) and (Pos(chr(i),n[j])=0))  then
     write(chr(i),',');
 writeln; 
 end;
 readln;
end.



Добавлено @ 17:29
Код

if (( (i<91)  or (i>96)  or
         (i<123) or (i>127) or
         (i<175) or (i>223)) and (Pos(chr(i),n[j])=0))  then

Автор: Rodman 18.5.2007, 17:30
luna, какой у тя компилятор?

Я под Delphi и TurboPascal протестил!!!

Добавлено через 47 секунд
в чем прикол?

Автор: Misha_White 18.5.2007, 17:32
Rodman, 
Не знаю... я в BP7.0 писал...

Автор: luna 18.5.2007, 17:56
у меня тоже 7версия

Добавлено через 4 минуты и 2 секунды
киньте сюда файл ПОЖАЛУЙСТА!!! ....я исправила и все ровно не работает...

Автор: Misha_White 18.5.2007, 18:01
luna, 
Теперь работает?

Добавлено через 5 минут и 40 секунд
luna, 
А как не работает? 
Там говорю еще левые символы надо убрать из условия! У меня нету книг по паскалю, поэтому коды символов я не знаю... А так, вроде удаляет... Ну я символ "a" попробовал...

Добавлено через 6 минут и 23 секунды
Работат?  smile 

Автор: luna 18.5.2007, 18:18
запустила твой файл, и опять же символы вводит, но бесконечно......
и дальше не работает..не выводит ни чего

Автор: Misha_White 18.5.2007, 18:20
luna, 
А ты после слова <Enter> жмешь? Надо <Enter> жать, это ведь массив...

Автор: luna 18.5.2007, 18:22
не такая я и дура....конечно
ввожу мама потом ENTER
и он переходит на след строку, и опять можно вводить слово...и так бесконечно....

Автор: Misha_White 18.5.2007, 18:25
luna, 
Не должно... Должно быть 10 раз... 10 слов вводила?

Автор: luna 18.5.2007, 18:31
вот теперь работает....))))
осталось найти коды рамок, чтобы они не выводились....
Кстати, еще одна заметка, а как сделать так чтобы он выводил 1 алфавит, и вычитал из него все буквы всех строк?

Автор: Misha_White 18.5.2007, 18:35
luna, 
Это уже интереснее...

Добавлено через 2 минуты и 28 секунд
Можно попробовать как предлагалось раньше (в самом начале) ввести алфавит, только из всех букв в одном, а потом циклом искать вхождение и удалять из строки-алфавита посимвольно...

Добавлено через 3 минуты и 16 секунд
ведь pos() возвращает позицию... по моему...

Автор: luna 18.5.2007, 18:43
в const ставим M=1
и через провбел пишем сколько хотим слов
он вычетает все буквы из 1 алфавита

Автор: Misha_White 18.5.2007, 18:44
luna, 
 smile  тогда это уже не массив слов...

Автор: luna 18.5.2007, 18:45
а где можно увидеть коды рамок?
может кто подскажет?

Автор: Misha_White 18.5.2007, 18:47
luna, 
В учебникак пишут таблички с кодами...
Говорю, не перься скодами, а напиш алфавит в одну строку! Простая задачка-то...

Автор: luna 18.5.2007, 18:47
Цитата(Misha_White @ 18.5.2007,  18:44)
luna, 
 smile  тогда это уже не массив слов...

как не массив? строка...
и так сойдет, ну если скажут переделать, то переделаю.....
главное выполняется то, что проситься ) smile 
Огромное спасибо!!!!!!!!!!!
 smile 

Автор: Misha_White 18.5.2007, 18:50
luna, 
Попробуй!

На здороье!
Поставь галочку вверху...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)