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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2009, 23:24   #1
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
Восклицание Как вывести на экран... (Делфи)!!!

Вывести на экран количество каждой из содержащихся в строке латинских и русских прописных букв в порядке их появления.

Если вы напишете программу то пожалуйста с коментариями, а то лежал в больнице пропустил эти темы и не понимаю, или же просто обьясните как и чем воспользоваться, я знаю что тут нужны строковые типы.
ОЧЕНЬ ПРОШУ ПОМОГИТЕ ЕСЛИ НЕ С ПРОГОЙ ХОТЯ БЫ ОБЬЯСНИТЕ
P.S. я на первом курсе
DjVidan вне форума Ответить с цитированием
Старый 08.03.2009, 23:54   #2
Лунатик222
Ламер z:]
Пользователь
 
Аватар для Лунатик222
 
Регистрация: 19.01.2009
Сообщений: 60
По умолчанию

Цитата:
Сообщение от DjVidan Посмотреть сообщение
Вывести на экран количество каждой из содержащихся в строке латинских и русских прописных букв в порядке их появления.

Если вы напишете программу то пожалуйста с коментариями, а то лежал в больнице пропустил эти темы и не понимаю, или же просто обьясните как и чем воспользоваться, я знаю что тут нужны строковые типы.
ОЧЕНЬ ПРОШУ ПОМОГИТЕ ЕСЛИ НЕ С ПРОГОЙ ХОТЯ БЫ ОБЬЯСНИТЕ
P.S. я на первом курсе
заноси каждый символ из строки(кроме пробела) в массив, потом циклически проверяй его на повторы, с приоритетом по элементам массива 1>2; 2>3 и т д
Лунатик222 вне форума Ответить с цитированием
Старый 09.03.2009, 00:34   #3
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
По умолчанию

A для русских букв массив должен быть одельный? И Boolean или char?
Пожалуйсто если не трудно напишите программу( я не халявщик просто время очень сильно поджимает), очень вас прошу, от нее зависит моя модульная аттестация(((
DjVidan вне форума Ответить с цитированием
Старый 09.03.2009, 00:45   #4
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
По умолчанию

Программа считывает свой исходник на паскале (как заданный текст) и выводит на экран прописные буквы латинского и русского алфавитов в порядке убывания частоты появления в тексте. Вот мне друг дал чето похожее но только в Паскале

PROGRAM q90010;
VAR
a: packed array[0..255]of integer;
c:char;
f:text;
i,m:integer;
BEGIN
FOR i:=0 TO 255 DO
a[i]:=0;
ASSIGN(f,'q90010.pas');
RESET(f);
WHILE not eof(f)do
BEGIN
READ(f,c);
INC(a[ORD©]);
END;
CLOSE(f);
m:=0;
FOR i:=0 TO 255 DO
IF m<a[i] THEN m:=a[i];
WHILE m>0 DO
BEGIN
FOR i:= 65 TO 160 DO
IF(i<91)OR(i>127)THEN
IF m=a[i] THEN WRITE(' ',CHAR(i),':',a[i]:5);
m:=m-1;
END;
READLN;
END.

Исправьте что тут не так для делфи
DjVidan вне форума Ответить с цитированием
Старый 09.03.2009, 01:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да в принципе, для консольного приложения Delphi всё нормально...
Только сохраните в файлик q90010.dpr

Ещё подправил для обработки русских буковок.
(в windows кодировке win-1251) ПРОПИСНЫЕ русские буквы расположены в диапазоне 192-223)

Код:
program q90010;
{$APPTYPE CONSOLE}
var
  a: packed array[0..255] of integer;
  c: char;
  f: text;
  i, m: integer;
begin
  for i := 0 to 255 do
    a[i] := 0;
  ASSIGN(f, 'q90010.dpr');
  RESET(f);
  while not eof(f) do
  begin
    READ(f, c);
    INC(a[ORD(c)]);
  end;
  CLOSE(f);
  m := 0;
  for i := 0 to 255 do
    if m < a[i] then m := a[i];
  while m > 0 do
  begin
    for i := 65 to 223 do
      if (i < 91) or (i > 191) then
        if m = a[i] then WRITE(' ', CHAR(i), ':', a[i]: 5);
    m := m - 1;
  end;
  WRITELN;
  READLN;
end.
Добавлено.
Нет. Лучше русские буковки в коде программы не писать.
Считаются они правильно, но выводить их через WRITE не получится - надо преобразовывать в OEM кодировку...
Это несложно, но, мне кажется, что для Вашего уровня это будет трудно для понимания...

Последний раз редактировалось Serge_Bliznykov; 09.03.2009 в 01:47.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2009, 02:31   #6
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
По умолчанию

Огромное спасибо, но у меня есть несколько во просов по коду
INC(a[ORD(c)]); //Что это и что оно делает?

for i := 65 to 223 do //откуда взялись числа 65 и 223
if (i < 91) or (i > 191) then //и откуда 91 и 191? Что все эти цифры обозначают?

И много тут мне переделывать чтобы не из файла считал а из строчки введеной пользователем?
Заранее благодарен
DjVidan вне форума Ответить с цитированием
Старый 09.03.2009, 03:15   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
for i := 65 to 223 do //откуда взялись числа 65 и 223
if (i < 91) or (i > 191) then //и откуда 91 и 191? Что все эти цифры обозначают?
Это расположение прописных букв в таблице ASCII

почитайте - http://ru.wikipedia.org/wiki/ASCII

Цитата:
И много тут мне переделывать чтобы не из файла считал а из строчки введеной пользователем?
Заранее благодарен
выкинуть всё, что связано с файлом (Assign / Reset / While not Eof / Read / close)
вместо этого вставить код:
Код:
var s : string;

WriteLn('Vvedite stroku: ');
ReadLn(s);
for i:=1 to Length(s) do 
   INC(a[ord(s[i])]);
Вложения
Тип файла: rar ASCII_Screenshots.rar (15.3 Кб, 10 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2009, 14:20   #8
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
По умолчанию

Еще раз спасибо за обьяснения, я сделал как вы и сказали, но при вводе строки она сразу вылетает, и я так и не понял что делает эта строка
INC(a[ORD(c)]); ?

program q90010;
{$APPTYPE CONSOLE}
var
s: string;
a: packed array[0..255] of integer;
c: char;
f: text;
i, m: integer;
begin
WriteLn('Vvedite stroku: ');
ReadLn(s);
for i:=1 to Length(s) do
INC(a[ord(s[i])]);
for i := 0 to 255 do
a[i] := 0;
begin
READ(f, c);
INC(a[ORD(c)]);
end;
m := 0;
for i := 0 to 255 do
if m < a[i] then m := a[i];
while m > 0 do
begin
for i := 65 to 223 do
if (i < 91) or (i > 191) then
if m = a[i] then WRITE(' ', CHAR(i), ':', a[i]: 5);
m := m - 1;
end;
WRITELN;
READLN;
end.
DjVidan вне форума Ответить с цитированием
Старый 09.03.2009, 14:36   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

я уже решал подобную задачу, только выводил процентное содержание кадой буквы в тексте

http://programmersforum.ru/showthrea...F6%E5%ED%F2%FB

в общем написал, небольшая проблема с русскими буквами - выводит постоянно количество одной и той же буквы при ее встрече - не могу никак понять, почему:
Код:
program project;
var
 a : array ['A'..'Z'] of byte;
 b : array ['Ђ'..'џ'] of byte;
 ch : set of char;
 s : string;
 c : char;
 i,k : byte;
begin

  write ('s: '); readln (s);
  for c:='A' to 'Z' do a[c]:=0;
  for c:='Ђ' to 'џ' do b[c]:=0;
  ch:=[];
  for i:=1 to length(s) do
  begin
    c:=s[i];
    if upcase(c) in ['A'..'Z'] then inc(a[upcase(c)])
    else
    if ((ord(c)>=128) and (ord(c)<=175)) or ((ord(c)>=224) and (ord(c)<=239)) then
    begin
      if c in ['а'..'п'] then c:=chr(ord(c)-80)
      else c:=chr(ord(c)-32);
      inc(b[c])
    end
  end;

  for i:=1 to length(s) do
  begin
    c:=s[i];
    if not (c in ch) and (upcase(c) in ['A'..'Z']) then
     writeln (upcase(c),'= ',a[upcase(c)])
    else
    if not (c in ch) and ((ord(c)>=128) and (ord(c)<=175)) or ((ord(c)>=224) and (ord(c)<=239)) then
    begin
      if c in ['а'..'п'] then c:=chr(ord(c)-80)
      else c:=chr(ord(c)-32);
      writeln (c,'= ',b[c])
    end;
    include(ch,s[i])
  end;
  readln
end.

Последний раз редактировалось capta1n; 09.03.2009 в 15:33.
capta1n вне форума Ответить с цитированием
Старый 09.03.2009, 15:08   #10
DjVidan
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от capta1n Посмотреть сообщение
я уже решал подобную задачу, только выводил процентное содержание кадой буквы в тексте

http://programmersforum.ru/showthrea...F6%E5%ED%F2%FB

Ты мне лучше скажи что не так с моим кодом...
DjVidan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести bmp изображение на экран?? lexuss Паскаль, Turbo Pascal, PascalABC.NET 12 09.04.2011 00:02
Как вывести на экран двумерный массив случайным образом? Stager Общие вопросы C/C++ 5 07.01.2009 20:53
как вывести все имеющиеся файлы в каталоге на экран? Almost456 Паскаль, Turbo Pascal, PascalABC.NET 2 24.12.2008 20:44
Как вывести на экран имена файлов текущего каталога? (С++) Darw1n Помощь студентам 1 13.12.2008 11:10
Как вывести из текстового файла на экран русский текст? Mischa Помощь студентам 8 12.03.2008 06:23