Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / подпрограммы.(процедуры). Написать программу. / 8 сообщений из 8, страница 1 из 1
28.10.2013, 16:58
    #38443866
Snake95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
Дан текстовый файл (можно использовать Z:\procedure.txt). Подсчитать количество латинских букв в файле (маленькие и большие буквы считать одинаковыми). Вывести на экран в столбик последовательно все буквы латинского алфавита. Напротив каждой буквы напечатать ряд из звездочек, длина которого равна количеству данной буквы в файле. Подсказка: для подсчета букв в файле используйте массив, индексы. Тема подпрограммы. язык паскаль.
...
Рейтинг: 0 / 0
28.10.2013, 19:13
    #38444074
Snake95
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
Программа выдает черный экран я не знаю как исправить.
Program rezo;
var
f:text;
mass: array['A'..'Z'] of integer;
k:char;
k1:char;
Procedure stamp (l:integer);//подпрограмма, которая печатает ряд звездочек заданной длины//
var
n:byte;
begin
for n:=1 to l do
write('*');
writeln;
end;
begin
Assign(f,'C:/procedure.txt');
Reset(f);
While not eof (f) do
begin
If (k>= 'A') and (k<= 'z') then //считывается то что является буквой//
begin
read (f, k1);
k1:=upcase(k1);
mass[k1]:=mass[k1]+1;
end;
For k1 := 'A' to 'Z'do
stamp(mass[k1]);
end;
close(f);
end.
...
Рейтинг: 0 / 0
28.10.2013, 23:09
    #38444240
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
А просто надо больше читать хелп. Ну и косяков бы поменьше:
- в процедуре Assign имя файла должно подчиняться ограничениям DOS (8.3 символов), а у вас - девять; ну и прямой слэш до кучи
- почему в подпрограмме у вас параметр L - целое (2 байта) а переменная N - один байт? а если каких либо символов будет больше 255? больше 32767?
- почему вы обрабатываете переменную K1, а сравниваете "с буквой" - переменную K?
- почему у вас вывод "звёздочек" находится внутри цикла чтения из файла? по идее, у вас он будет исполняться после считывания/обработки каждого символа и где вывод самих "буковок"?

С учётом всего этого, код мог бы выглядеть так:
Код: 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.
Program rezo;

var
 f:text;
 mass: array['A'..'Z'] of integer;
 k:char;

Procedure stamp (l:word);
var
 n:word;
begin
 for n:=1 to l do
 write('*');
end;

begin

 {$I-}
 Assign(f,'c:\proc.txt');
 Reset(f);
 {$I+}
 if IOResult <> 0 then begin Writeln('Проблема с доступом к файлу'); ReadLn; halt(1) end;

 Repeat
  Read(f,k);
  k:=UpCase(k);
  If (k>= 'A') and (k<= 'Z') then mass[k]:=mass[k]+1
 Until eof(f);
 close(f);

 writeln;
 For k := 'A' to 'Z' do
 begin
  write(k,' ');
  stamp(mass[k]);
  writeln
 end;

 readln;
end.

...
Рейтинг: 0 / 0
31.10.2013, 13:55
    #38448316
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
AndreTM- в процедуре Assign имя файла должно подчиняться ограничениям DOS (8.3 символов), а у вас - девять; ну и прямой слэш до кучи


Это кто тебе такое сказал? В Reset() можно отдать полное имя файла с путем. В более новых паскалях (Virtual Pascal, Free Pascal, Delphi) - с длиной имени файла можно в общем случае вообще не заморачиваться.
...
Рейтинг: 0 / 0
31.10.2013, 15:18
    #38448492
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
DarkMasterЭто кто тебе такое сказал?Мы так близко знакомы?
DarkMasterВ Reset() можно отдать...Я увидел студента и TP/BP. Ибо "чОрный экран". Откуда вы там рассмотрели Delphi и альтернативки - я не в курсе. Как и то, что "В Reset() можно отдать полное имя файла". А хелп BP говорит прямо:
Declaration:
procedure Assign(var f; String);
...
FileName consists of a name of up to eight characters, optionally followed by a period and an extension of up to three characters. The maximum length of the entire file name is 79 characters.
...
Declaration:
procedure Reset(var F [: File; Recsize: Word ] );
...
Рейтинг: 0 / 0
31.10.2013, 17:37
    #38448794
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
Snake95If (k>= 'A') and (k<= 'z') then //считывается то что является буквой//

Это некорректно. В этот диапазон попадают и прочие символы.
Смотри таблицу здесь http://ru.wikipedia.org/wiki/ASCII
...
Рейтинг: 0 / 0
31.10.2013, 17:41
    #38448806
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
AndreTM,

1) Приведенный исходник может нормально быть откомпилирован в TP/BP/VP/FP/Delphi.
2) Если бы обломился reset() - была бы какая-то ругань на экране (у него оператор не обернут ни в try..except и в {$I-/+}), а не черный экран, который возникал потому, что студент заплутал между переменными K и K1 - может все ж таки Дельфи?.
3) С учетом постановки задачи (нужно подсчитать буковки)
- расширить массив до 'A'..'z' - т.е. учитывать буквы без учета регистра.
- использовать F:file of AnsiChar или F:File of Char

P.S. Ничего личного ;)
...
Рейтинг: 0 / 0
01.11.2013, 01:03
    #38449132
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подпрограммы.(процедуры). Написать программу.
DarkMaster,

1) Может быть откомпилирован, я не спорю, ибо это и наблюдал.

2) Черный экран мог быть, а ругани могло и не быть (зависит от настроек IDE) - и именно на Reset(). Поскольку функция вызывала Exception.

DarkMasterрасширить массив до 'A'..'z' - т.е. учитывать буквы без учета регистра.Snake95(маленькие и большие буквы считать одинаковыми)
Ну и файл можно было определить хоть байтовым бинарником - лишь бы в алгоритме было понимание, что считывается...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / подпрограммы.(процедуры). Написать программу. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]