infoegehelp.ru

Успешно сдать ЕГЭ по информатике
  • Главная
  • Контакты
  • Карта сайта
  • Помощь сайту
Важно
  • Демо варианты ЕГЭ
  • Учим числа: 2 в степени
  • Биты, байты, килобайты
Решение задач
  • Задачи вне основных разделов информатики
Разделы информатики
  • 2011-12-18-14-33-54Системы счисления
  • 2011-12-18-16-45-20Алгебра логики
  • 2011-12-18-16-55-26Программирование
  • 2011-12-18-16-53-40Кодирование информации
  • 2011-12-18-16-56-19Компьютерные сети и Интернет
  • -excelЭлектронные таблицы (Excel)
  • 2011-12-18-16-57-50Базы данных
  • 2011-12-18-16-58-50Графы
  • 2011-12-18-17-00-15Файловая система
  • Устройство компьютера
  • ПО компьютера

Разбор задачи C5 (демо ЕГЭ 2004)

Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы "." в этом файле отсутствуют). Требуется написать программу на языке Паскаль или Бейсик, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту.
Например, пусть файл содержит следующую запись: It is not a simple task. Yes! Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом:  I 3
Решение:

Алгоритм программы такой:

  • Считываем текст из файла "text.dat" до точки. Сам текст не сохраняем. При этом определяем и сохраняем в массиве количество вхождений каждой из букв, которые встретились в данном тексте.
  • Определяем индекс буквы с максимальным количеством вхождений.
  • Выводим букву с максимальным числом вхождений.(и стоящую раньше в алфавите, если букв получается несколько) и число ее вхождений в текст.

Программа написана на языках:

  • Паскаль (среда разработки Turbo Pascal 7.0),
  • Бейсик (среда разработки Quick Basic 4.5),
  • Алгоритмический язык (среда разработки Кумир 1.9.0).
  • Си (среда разработки Borland C++ 3.1),
Содержимое файла "text.dat", который используют программы:

Задача C5 ЕГЭ по информатике 2004 содержимое файла text.dat

Чтобы прочесть комментарии к программе, наведите мышью на соответствующую строку. Строки, снабженные комментарием, выделены фиолетовым цветом.

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

Паскаль (исходник+exe-файл)Бейсик (исходник)
var f:text;
   kolB:array['A'..'Z'] of integer;
   ch,chMax:char;
begin
   assign(f,'text.dat');
   reset(f);
   for ch:='A' to 'Z' do kolB[ch]:=0;
   repeat
     read(f,ch);
     ch:= upcase(ch);
     if ch in ['A'..'Z'] then
       kolB[ch]:=kolB[ch]+1

   until ch='.';
   close(f);
   chMax:='A';
    for ch:= 'B' to 'Z' do
      if kolB[ch]>kolB[chMax] then
        chMax:=ch;

   writeln(chMax,' ',kolB[chMax]);
   readln
end.
DIM i, iChMax, ch, kolB(26) AS INTEGER
OPEN "text.dat" FOR INPUT AS #1
FOR i = 1 TO 26
   kolB(i)=0
NEXT i

s$ = INPUT$(1, #1)
DO WHILE NOT (s$ = ".")
  ch = ASC(s$)
   IF(ch>=ASC("A")AND ch<=ASC("Z")) THEN
    ch = ch - ASC("A") + 1
   ENDIF

  IF(ch>=ASC("a")AND ch<=ASC("z")) THEN
    ch = ch - ASC("a") + 1
   ENDIF

  IF(ch>=1 AND ch<=26) THEN kolB(ch)=kolB(ch)+1
  s$ = INPUT$(1, #1)
LOOP
CLOSE #1
iChMax= 1
FOR i = 2 TO 26
  IF kolB(i) > kolB(iChMax) THEN iChMax = i
NEXT i

PRINT CHR$(iChMax + ASC("A")-1); kolB(iChMax)
END
Алгоритмический (исходник)Си (исходник+exe-файл)
использовать Файлы П
алг
нач
   цел f,i,chIndex,iChMax
   целтаб kolB[1:26]
   сим ch
   f:=открыть на чтение('text.dat')
   нц для i от 1 до 26
     kolB[i]:=0
   кц

   нц
     Фввод f,ch
     chIndex:=0
     если код(ch)>=код('A') и код(ch)<=код('Z')
         то chIndex:=код(ch)-код('A')+1
       все

     если код(ch)>=код('a') и код(ch)<=код('z')
         то chIndex:=код(ch)-код('a')+1
      все

      если chIndex>=1 и chIndex<=26
        то kolB[chIndex]:=kolB[chIndex]+1
      все

   кц при ch='.'
   закрыть(f)
   iChMax:=1
    нц для i от 2 до 26
      если kolB[i]>kolB[iChMax]
        то iChMax:=i
      все
    кц

   вывод символ(iChMax+код('A')-1),kolB[iChMax]
кон
#include <stdio.h>
#include <string.h>
#include <conio.h>

void main()
{
    FILE *fp;
    char ch;
    int kolB[26];
    int i,iChMax;
    fp=fopen("text.dat","r");
    for(i=0;i<26;i++) kolB[i]=0;
    fscanf(fp,"%c",&ch);
    while(ch!='.'){
      (int) ch;
        if(( ch>=(int)('A') )&&( ch<=(int)('Z') ))
          ch-=(int)('A');

      if(( ch>=(int)('a') )&&( ch<=(int)('z') ))
          ch-=(int)('a');

      if((ch>=0)&&(ch<=25)) kolB[ch]+=1;
      (char)ch;
      fscanf(fp,"%c",&ch);
    }
    fclose(fp);
    iChMax=0;
     for(i=1;i<26;i++)
       if(kolB[i]>kolB[iChMax])
         iChMax=i;

    printf("%c %d",iChMax+(int)('A'),kolB[iChMax]);
    getch();
}

Работа программы на этих языках:

Задача C5 ЕГЭ по информатике 2004 результат работы программы

Перейти к аналогичным задачам: С4-2013,  С4-2012,  С4-2011,  С4-2010,  С4-2009,  С4-2008,  С4-2007,  С4-2006,  С5-2005.

Перейти к другим задачам.

 

Rambler's Top100

© Латыпова В.А., 2012-2020. Все права защищены.
Копирование материалов сайта только с разрешения администрации сайта