Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с задачей
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SkyRideR
Всем привет. Нужно написать прогу, её задача в том чтобы считала кол-во символов в слове(текстовый), затем кол-во этих символов заносила в номер массива которому соответствует кол-во этих символов. После этого строила график отображая в каком номере массива, сколько символов. Большую часть сделал, а вот график
как-то не получается сделать

program dsv;
uses graph;
var
a : array[1..25] of integer;
GrDriver, GrMode : integer;
ffile : text;
buf : string;
i : integer;
begin
assign(ffile,'file1.txt');
reset(ffile);
while not eof(ffile) do begin
readln(ffile,buf);
while (pos(' ',buf) <> 0) do begin
i := pos(' ', buf);
inc(a[length(copy(buf, 1, i-1))]);
delete(buf, 1, i);
end;
inc(a[length(buf)]);
end;

begin
GrDriver := detect;
GrMode := 0;
initgraph(GrDriver, GrMode, '');

line(50,50,50,300);
line(50,300,500,300);
moveto(50*i, 300-(a[i]*4));
lineto(50*i, 300-(a[i]*4));

readln;
CloseGraph;
close(ffile);
end; end.
мисс_граффити
1. заключи программу в теги code
2. сделай нормальное форматирование...
в таком виде непонятно, какой begin к чему относится...
и чему равно i при построении графика. имхо, там цикл должен быть...
klem4
мне кажется было-бы намного рациональнее для хранения частот появления разных по длине слов использовать список. Поищи недавно решалась задача "Частотный словарь" там есть сходство с твоей задачей.
SkyRideR
в общем отчасти разобрался как, что делать, теперь только не получается сам график достроить, чтобы начиная с первой позиции он проводил линию в следующую позицию и т.д. до конца
program dsv;
uses graph;
var
a : array[1..25] of integer;
GrDriver, GrMode : integer;
ffile : text;
buf, r, t, q, w : string;
i : integer;
begin
assign(ffile, 'c:\ctix.txt');

reset(ffile);
while not eof(ffile) do begin
readln(ffile, buf);
while (pos(' ', buf) <> 0) do begin
i := pos(' ', buf);
inc(a[length(copy(buf, 1, i-1))]);
delete(buf, 1, i);
end;
inc(a[length(buf)]);
end;
close(ffile);

GrDriver := detect;
GrMode := 0;
initgraph(GrDriver, GrMode, '');
for i := 1 to 25 do begin
r:='Y';
t:='X';
str(a[i], w);
str(i, q);
line(10,10,10,300);
line(10,300,600,300);
moveto(20*i, 300-(a[i]*4));
lineto(20*i, 300);
moveto(0, 10);
outtextxy(0, 10, r);
moveto(490, 310);
outtextxy(590, 310, t);
moveto(20*i, 290-(a[i]*4));
outtextxy(20*i, 290-(a[i]*4), w);
moveto(20*i, 290-(a[i]*4));
outtextxy(20*i, 310, q);
{moveto(10*i, (a[i]*4));
line(10,300, (a[i]*4),(a[i]*4) );} вот тут у меня и не получается не могу понять как координаты задать правильно
end;
readln;
CloseGraph;

end.
volvo
Во-первых (и тебе мисс_граффити уже говорила об этом) пользуйся тегами, Без них программа просто не читаема.

Во-вторых, читай комментарии...

program dsv;
uses graph;
var
  a: array[1..25] of integer;
  GrDriver, GrMode: integer;

  ffile: text;
  buf, r, t, q, w : string;
  i: integer;

begin
  assign(ffile, 'c:\ctix.txt');
  reset(ffile);
  while not eof(ffile) do begin
    readln(ffile, buf);
    while (pos(' ', buf) <> 0) do begin
      i := pos(' ', buf);
      inc(a[length(copy(buf, 1, i-1))]);
      delete(buf, 1, i);
    end;
    inc(a[length(buf)]);
  end;
  close(ffile);

  GrDriver := detect;
  GrMode := 0;
  initgraph(GrDriver, GrMode, '');

  { Это вообще можно было не делать, можно подставить символы в outtextxy сразу}
  r:='Y';
  t:='X';

  { Выводить оси координат и их названия совсем не обязательно в цикле - выносим }
  line(10,10,10,300);
  line(10,300,600,300);

  outtextxy(0, 10, r);
  outtextxy(590, 310, t);

  for i := 1 to 25 do begin
    moveto(20*i, 300-(a[i]*4));
    lineto(20*i, 300);

    str(a[i], w); 
    {
      не имей привычки делать что-то заранее. Вот перед тем,
      как что-то выводить - конвертируй, а не где-то в самом начале...
    }
    moveto(20*i, 290-(a[i]*4));
    outtextxy(20*i, 290-(a[i]*4), w);

    str(i, q); { <--- Аналогично - конвертация перед выводом }
    moveto(20*i, 290-(a[i]*4));
    outtextxy(20*i, 310, q);
  end;

  {
    В принципе, можно было объединить этот цикл с предыдущим, но
    мне например не нравится переключать цвета туда-сюда. Поэтому
    я вынес отрисовку ломаной в отдельный цикл...
  }
  setcolor(green);
  moveto(10, 300);
  for i := 1 to 25 do begin
    lineto(20*i,290 - (a[i]*4));
  end;

  readln;
  CloseGraph;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.