3 / 3 / 2
Регистрация: 29.11.2017
Сообщений: 126
1

Вывести список лексем каждого класса и списка идентификаторов с указанием частоты

04.05.2019, 22:04. Показов 330. Ответов 2
Метки нет (Все метки)

Сама программа Program.rar. Мне бы как-нибудь создать неупорядоченные таблицы(для лексем в ModulaPars.pas попыталась создать массив) и внедрить вот такую подобную процедуру двоичного поиска:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure BinSearch(var T: tTable; K: tKey; var res: integer);
var
   L, R, C: integer;
begin
   L := 1;
   R := T.n;
   while L < R do begin
      C := (L + R) div 2;
      if T.a[C].key < K then
         L := C + 1
      else
         R := C;
      end;
   if T.a[L].key = K then
      res := L
   else
      res := 0;
end;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2019, 22:04
Ответы с готовыми решениями:

Имеется список слов. Составить список различных слов этого списка с указанием частоты их появления в списке
Имеется список слов. Составить список различных слов этого списка с указанием частоты их появления...

Составить список различных слов первого списка с указанием частоты их появления в первом списке
Имеется список слов. Составить список различных слов первого списка с указанием частоты их...

Имеется список учащихся класса с указанием роста каждого из них в сантиметрах
Имеется список учащихся класса с указанием роста каждого из них в сантиметрах. Выясните,...

Напечатать список класса с указанием для каждого ученика количества его однофамильцев
Помогите решить задачу: В символьном массиве хранятся фамилии и инициалы учеников класса....

2
2112 / 1261 / 476
Регистрация: 07.04.2017
Сообщений: 4,460
04.05.2019, 22:56 2
Цитата Сообщение от Argenta Посмотреть сообщение
неупорядоченные
Цитата Сообщение от Argenta Посмотреть сообщение
двоичного поиска
А ничего, что для двоичного поиска нужен именно упорядоченный список?
1
3 / 3 / 2
Регистрация: 29.11.2017
Сообщений: 126
05.05.2019, 11:43  [ТС] 3
Я отсортировала, но всё равно что-то нерационально в поиске делаю
ибо вывод такой :
lexAND2 3 раз(а), 15%
lexAND2 0 раз(а), 0%
lexAND2 0 раз(а), 0%
lexSemi 13 раз(а), 65%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexSemi 0 раз(а), 0%
lexNum 4 раз(а), 20%
lexNum 0 раз(а), 0%
lexNum 0 раз(а), 0%
lexNum 0 раз(а), 0%

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
unit MODULAPars;
 
interface
 
procedure Analyzer;
 
{======================================================}
 
implementation
 
uses
   MODULAScan;
const
   nmax = 400000;
   percent = 100;
type
   tRec = record
      lx : tLex;
      count : integer;
   end;
   tArr = array [1..nmax] of tRec;
var
   a : tArr;
   n: integer;
   f1 : text;
   w: tLex;
procedure Sort(var a: tArr; n : integer);
var
   i, j, jmin: integer;
   buf: tRec;
begin
   for i := 1 to n-1 do begin
      jmin := i;
      for j := i+1 to n do begin
         if a[j].lx < a[jmin].lx then
            jmin := j;
      end;
      buf := a[i];
      a[i] := a[jmin];
      a[jmin] := buf;
   end;
end;   
 
procedure Search(var a : tArr; w : tLex);
var 
   L, R, C : integer;
begin
   L := 1;
   R := n;
   while L < R do begin
      C := (L+R) div 2;
      if {(a[c].lx <> '') and }(a[c].lx < w) then
         L := C + 1
      else
         R := C;
   end;
   if a[R].lx = w then
      a[R].count := a[R].count + 1;
end;
 
procedure Analyzer;
var 
   i: integer;
begin
   n := 0 ;
   while Lex <> lexEOT do begin
      n:= n+1;
      a[n].lx := Lex;
      NextLex;
   end;
 
   Sort(a, n);
  
   //for i:=1 to n do
      //Writeln (a[i].lx);
   for i:=1 to n do begin
     w:= a[i].lx;
     Search(a, w);
   end;   
   Assign(f1, 'result.txt');
   Rewrite(f1);
   Writeln(f1, 'Сканер языка Модула-2 ' );
   Write(f1, 'Чиcлo лексем ', n );
   for i:=1 to n do
     Writeln(a[i].lx, ' ', a[i].count, ' раз(а), ', a[i].count/n*percent, '%');
   close(f1);
end;
 
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2019, 11:43
Помогаю со студенческими работами здесь

Напечатать список класса с указанием для каждого ученика количества его однофамильцев
Добрый дань. Прежде чем действовать, хотел бы спросить мнения и получить хороший совет....

Напечатать список класса с указанием для каждого ученика количество его однофамильцев
1)В строковом массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список...

Напечатать список класса с указанием для каждого ученика количество его однофамильцев
В строковом массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса...

Напечатать список класса с указанием для каждого ученика количества его однофамильцев
В символьном массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список...

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

Требуется напечатать список класса с указанием для каждого ученика количества его однофамильцев
В строковом массиве хранятся фамилии и инициалы учеников класса. Требуется напечатать список класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru