Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с задачей
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.