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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 09:51   #1
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

Код:
var  c:char;
     s:string;
     a:array[1..3] of char;
     b:array[1..3] of integer;
     aa:array[1..1] of char;
     i:integer;

begin

repeat

read(c);

 for i:=1 to 3
           do
           begin
             if a[1]=aa[1] then begin  a[1]:=c;  b[1]:=1; end
             else
             if a[i]=c  then  b[i]:=b[i]+1 else
             if a[i]=aa[1] then begin a[i]:=c; b[i]:=1 end;


           end;

until c='.';
writeln(a[1], ' количество =  ', b[1]);
writeln(a[2], ' количество =  ', b[2]);
writeln(a[3], ' количество =  ', b[3]);
readln;

end.
Надо при вводе разных букв запоминать букву и колько раз её ввели:
входные данные например такие:
uuuuuuuuuuu
tttttttttttt
oooooooooooo
====================
надо чтоб выводило
u количество = 11
t количество = ...
o количество = ...
но не могу понять, почему выводит так:
u количество = 11
u количество = 11
u количество = 11
P.S. Кстати как объединять данные в условии if после then
чё то чё то;
чё то чёто;
еще чё то;
на and'ы ругаеться, поэтому делала только с begin и end...
и еще как задать сравнить переменною с пустотой?
a[i]="пусто" ?




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.


ату я сравнивала так
a[i]=aa[1] //где aa[1] это пустой массив...
еще входные данные могут быть еще такими
uuuooottt
tttt
ooooo.

Цитата:
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
да ошиблась просто...

Последний раз редактировалось Stilet; 01.04.2011 в 13:17.
WebbMan вне форума Ответить с цитированием
Старый 01.04.2011, 10:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

сделайте массивчик, где и накапливайте количество символов.
Вот ПОЛНОЕ решение задачи:
Код:
var
  cnt : array[char] of integer;
  c : char;
  i : integer;
begin
  for c:=Low(cnt) to High(Cnt) do cnt[c] := 0;

  repeat
    read(c);
    inc(Cnt[c]);
  until c='.';

  {вывод результата}
  for c:=Low(cnt) to High(Cnt) do
    if cnt[c]>0 then
       WriteLn('Символ: ',c,' количество: ',cnt[c]);
  readln;

end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2011, 10:26   #3
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

О большое спасибо, конечно надо было без всяких наворотов, ладно пойду изучать новые функции.
WebbMan вне форума Ответить с цитированием
Старый 01.04.2011, 10:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
ладно пойду изучать новые функции.
э... если не секрет, что Вы имеете в виду под новыми функциями?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2011, 13:51   #5
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

Цитата:
э... если не секрет, что Вы имеете в виду под новыми функциями?!
Low() и High() но я уже разобралсь эти функции возвращают начальное и конечное значение...
а что значит array[char] ?
я только с array[1..n] знакома... это типо под каждую переменную с будет выделяться новая ящейка в массиве?
WebbMan вне форума Ответить с цитированием
Старый 01.04.2011, 14:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а что значит array[char] ?
Если не ошибаюсь это указание массива по размеру типа - 255 элементов
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2011, 14:59   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Stilet
Если не ошибаюсь это указание массива по размеру типа - 255 элементов
256. нулевой символ тоже будет!


Цитата:
Low() и High() но я уже разобралсь эти функции возвращают начальное и конечное значение...
ну, практически, Вы правы. Только не "начальное и конечное" значения, а (в данном случае) минимальную границу массива и максимальную границу массива.
Например, если Вы опишите TestArr : array['A'..'Z'] of Integer;
то Low(TestArr) вернёт 'A'
а High(TestArr) вернёт 'Z'

а если Вы опишите TestArr2 : array[15..22] of Integer;
то Low(TestArr2) вернёт 15
а High(TestArr2) вернёт 22

Цитата:
а что значит array[char] ?
в качестве границ массива можно использовать ЛЮБОЙ ПЕРЕЧИСЛЯЕМЫЙ тип!
т.к. тип CHAR - это однобайтовая величина, от символа с нулевым кодом до символа с кодом 255
то вместо array[char] можно записать так (это полностью идентичные описания массивов): :array[#0..#255] (решёточка - это означает, что символ задаётся своим кодом.
или, идентично, можно так записать:
cnt : array[chr(0)..chr(255)] of integer;

все эти записи говорят об одном и том же - мы создаём массив, который индексируется символами, от символа с кодом ноль до символа с кодом 255 (я уже повторяюсь )

Цитата:
это типо под каждую переменную с будет выделяться новая ящейка в массиве?
точно! т.к. описываемый массив статический, то это означает, что объявленный массив (ну переменная этого типа) займёт в памяти столько место, сколько нужно для хранения всех элементов этого массива (в данном случае это будет ровно 256 байт)

Последний раз редактировалось Serge_Bliznykov; 01.04.2011 в 15:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2011, 14:59   #8
WebbMan
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 168
По умолчанию

Код:
var
  cnt : array[char] of integer;
  c : char;
  g : integer;
  y : char;
  i : integer;
  a : integer;
  arr : string;
begin
  for c:=Low(cnt) to High(Cnt) do cnt[c] := 0;

  repeat
    read(c);
    inc(Cnt[c]);
  until c='.';

  {ўлў®¤ १г«мв*в*}
  for c:=Low(cnt) to High(Cnt) do
    if (cnt[c]>0) and (c <> '.') then
    {   WriteLn('‘Ё¬ў®«: ',c,' Є®«ЁзҐбвў®: ',cnt[c]); }
       if cnt[c] mod 2 = 0 then begin
        a:=cnt[c] div 2;
        for i:=1 to a do arr:=arr+c;



         end

       else if cnt[c] > g then begin g:=cnt[c]; y:=c; end;

       g:=g div 2;
       for i:=1 to g do arr:=arr+y;
       arr:=arr+y;
       writeln('получили нужную нам половину строки: ',arr);
  readln;

end.
Вообщем требовалось написать программу которая из входных данных типо этого: TTTTTTOOOOIII делает строку читаему одинаково задом на перед TTTOOiiiOOTTT ну вообщем смысл понятен, я сделала получение половины строки TTTOOii и хотела повернуть строку и прибавить к прежней то есть получить TTTOOiiiOOTTT... Надо еще при повороте строки отнять лишнуюю i. help plz!

Цитата:
ну, практически, Вы правы. Только не "начальное и конечное" значения, а (в данном случае) минимальную границу массива и максимальную границу массива.
Например, если Вы опишите TestArr : array['A'..'Z'] of Integer;
то Low(TestArr) вернёт 'A'
а High(TestArr) вернёт 'Z'
это понятно помоги с постом выше =)...

там можно в конце убрать arr:=arr+y; потом просто сделать первая строка_i_перевернутая первая строка...

только незнаю как строку перевернуть.

Последний раз редактировалось Stilet; 01.04.2011 в 15:40.
WebbMan вне форума Ответить с цитированием
Старый 01.04.2011, 15:45   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Была уже такая задача: Символы в строке сортировались по убыванию их количеств.
А потом раскидывались по краям строки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2011, 15:54   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
только незнаю как строку перевернуть
да не надо ничего "переворачивать" (и, кстати, строка здесь вообще не нужна.

нужно. 1) пройтись по массиву и проверить, если ли нечётное количество букв.
Если есть БОЛЬШЕ одной буквы с нечётным значением,
то Баста! Делать больше нечего - можно выдавать сообщение, что из введённых букв НЕЛЬЗЯ составить строку палиндром и завершать работу.
Дальше.
в цикле, по всем буквам, где количество > 0 и количество чётное.
вывести ПОЛОВИННОЕ количество букв.
дальше вывести ту букву (полное количество раз) которая введена НЕЧЁТНОЕ число раз (если такой нет, то ничего не выводить)
дальше в цикле по всем буквам, где количество > 0 и количество чётное.
вывести ПОЛОВИННОЕ количество букв.

всё.

p.s. точку лучше исключить на этапе подсчёт букв, чем проверять при обработке:
Код:
 repeat
    read(c);
    if c<>'.' then inc(Cnt[c]);
  until c='.';

Последний раз редактировалось Serge_Bliznykov; 01.04.2011 в 16:05.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество букв "А" в предложении и общее количество букв.В тексте из файла несколько строк. kvas91 Общие вопросы C/C++ 3 14.11.2010 16:51
Подсчитать количество слов и количество букв MDSIQ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.11.2010 16:57
Посчитать количество введенных двоек Coder01 Общие вопросы Delphi 4 23.08.2010 19:38
подсчитать кол-во букв Naposaram Общие вопросы Delphi 3 10.03.2009 16:17