Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
8 / 8 / 3
Регистрация: 21.11.2014
Сообщений: 95

Из файла считывается только одна строка (в процедуре max происходит выход за границы массива)

21.11.2014, 22:58. Показов 1033. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хелп, дорогие форумчане!
Проблема: прога по-хорошему считывает из файла только одну строку
Проще говоря, если в файле одна строка - прога работает, если более вылазит ошибка в (в процедуре max происходит выход за границы массива).

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
const numerals=['0'..'9'];
 
const nmax=9;
type vec = array ['0'..'9'] of integer;
 
 
 
procedure max (var mas:vec;  var str:string);
var ch,index:char; max:integer; 
begin
 
 repeat
 max:=0;
  for ch:='9' downto '0' do
   begin
   
   if max<mas[ch]then 
    begin
    max:=mas[ch];
    index:=ch;
    
    
    end;
   end;
   
   str:=index+str;
   mas [index]:=0;
   
   
   
 until (max=0);
 delete (str,1,1);
   
  
  
end;
 
 
 
procedure GetVectorOfFrequency (var s:string; var sres:string);
var i:integer; ch:char;   mas:vec;                                                                                                 
begin
 sres:='';
  for ch:='0' to '9' do  mas [ch]:=0;
  for i:=1 to length (s) do 
   if s[i] in numerals then 
    mas [s[i]]:=mas[s[i]]+1;
    
 
 max (mas,sres);
 
 end;
 
procedure FileToFile (var f, fres: text);
var s, sres :string;
begin
 reset (f); rewrite(fres);
 while not EOF (f) do begin
  readln (f,s);
  GetVectorOfFrequency (s,sres);
  writeln (fres,sres);
  end;
  close(f); close(fres);
 end; 
  
 
 
var  f, fres:text;
     fname1, fname2:string;
     b: boolean; 
     
 
begin {main}
 write ('Введите имя исходного файла: ');
 readln (fname1);
 fname1:=fname1+'.txt';
 b:=FileExists (fname1);
 writeln (b);
 if  FileExists (fname1) then begin
  assign (f,fname1);
  write ('Введите имя результирующего файла: '); 
  readln (fname2);
  fname2:=fname2+'.txt';
  assign (fres,fname2);
  FileToFile (f,fres);
  end;
  
end.  {main}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2014, 22:58
Ответы с готовыми решениями:

Считывается только одна строка из файла
У меня есть код using (StreamReader fileSetting = new StreamReader(&quot;settings.txt&quot;)) { string...

Считывается только одна строка из файла
Задача такая: считать информацию из файла ,распарсить её функцией ExtractStrings(,,Pchar(str),str2); потом извлечь из переменной...

Считывается только одна строка из Memo
Помогите пожалуйста короче сделал прокси парсер по линков в memo добавил 4 строки откуда парсить прокси но такая проблема что всегда парсит...

6
8 / 8 / 3
Регистрация: 21.11.2014
Сообщений: 95
24.11.2014, 00:36  [ТС]
...

Добавлено через 12 часов 18 минут
Отбой, "дорогие" форумчане, готовые в один миг броситься на спасение погибающего человечества.

Добавлено через 10 минут
Для тех, кому интересно: дело было не в количестве строк в текстовом файле, а в пустых строках. Когда проге попадалась пустая строка, массив, считающий кол-во повторений цифр не заполнялся, поэтому в процедуре под кодовым названием max, не было вхождения в for, и, как следствие, переменной index не присваивалось никакого значения. Трабл разрешился простым присвоением переменной index начального значения.

p.s. не выспался прост, поэтому так жостко лоханулся

Добавлено через 3 минуты
Кому интересно - вот законченный код, с исходным заданием
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
uses crt;
const numerals=['0'..'9'];
 
const nmax=9;
type vec = array ['0'..'9'] of integer;
 
procedure Task;
begin
  TextColor(8);
  writeln ('Задание:');
  writeln ('В исходном текстовом файле записаны строки, содержащие цифры в произвольном порядке, возможно разделенные другими символами. Требуется написать программу, которая для каждой строки исходного файла будет выводить в результирующий файл последовательность цифр (0,1..9) из входной последовательности в порядке увеличения частоты их встречаемости. Каждая цифра при этом должна быть распечатана один раз.Если какие-то цифры встречаются одинаковое число раз, то они выводятся по возрастанию.');
  
  
 
  writeln;
 end;
 
procedure max (var mas:vec;  var str:string);
var ch,index:char; max:integer; 
begin
str:='';
 repeat
 max:=0;
 index:='0';
 
  for ch:='9' downto '0' do
   begin
   
   if max<mas[ch]then 
    begin
    max:=mas[ch];
    index:=ch;
    end;
     
   end;
   
   str:=index+str;
   mas [index]:=0;
   until (max=0);
 delete (str,1,1);
end;
 
 
 
procedure GetVectorOfFrequency (var s,sres:string);
var i:integer;    mas:vec;                                                                                                 
begin
 
  
  for i:=1 to length (s) do 
   if s[i] in numerals then 
    mas [s[i]]:=mas[s[i]]+1;
    
 
 max (mas,sres);
 
 end;
 
procedure FileToFile (var f, fres: text);
var s,sres:string;
begin
 reset (f); rewrite(fres);
 while not EOF (f) do begin
  readln (f,s);
  GetVectorOfFrequency (s,sres);
  writeln (fres,sres);
  end;
  close(f); close(fres);
 end; 
  
 
 
var  f, fres:text;
     fname1, fname2:string;
     b: boolean; 
     
 
begin {main}
Task;
 TextColor(LightGray);
repeat 
 b:=true;
 write ('Введите имя исходного файла: ');
 readln (fname1);
 fname1:=fname1+'.txt';
 b:=FileExists (fname1);
 
 if  FileExists (fname1) then begin
  TextColor(12);
  writeln ('Исходный файл с таким именем существует!');
  TextColor(LightGray);
  assign (f,fname1);
  write ('Введите имя результирующего файла: '); 
  readln (fname2);
  fname2:=fname2+'.txt';
  assign (fres,fname2);
  FileToFile (f,fres);
  end
 
   else begin
     TextColor(12);
     writeln ('Исходного файла с таким именем не существует!');
     TextColor(LightGray);
     b:= false;
     writeln ('Попробуйте еще раз, введя имя существующего файла:');
     writeln;
     end;
 until (b=true) 
end.  {main}
0
24.11.2014, 01:32

Не по теме:

тихо сам с собой :D

0
24.11.2014, 17:24

Не по теме:

JokeR.BY, по правилам форума, если решение найдено самостоятельно, его следует выложить на форум. ТС поступил согласно правилам форума, и это не смешно вовсе.

0
24.11.2014, 17:26

Не по теме:

Cyborg Drone, я о рассуждениях выше кода)

0
24.11.2014, 18:25

Не по теме:

JokeR.BY, послушали бы меня, когда я работаю. В стародавние времена мои перлы на магнитофон записывали. Потом за рюмкой чая после работы смеялись до икоты.

0
8 / 8 / 3
Регистрация: 21.11.2014
Сообщений: 95
24.11.2014, 18:33  [ТС]
JokeR.BY, а чё бы не поговорить-то с хорошим человеком
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2014, 18:33
Помогаю со студенческими работами здесь

Почему происходит выход за границы массива?
Программу прикрепил. Смысл кода - считывает из файла матрицу и находит кол-во фигур в ней(часть фигуры есть = число отличное от 0, пустота...

Почему происходит выход за границы массива в функции Analyze()?
#include &quot;Analyzer.h&quot; #include &quot;HashTable.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

Из файла правильно считывается только первая строка
Прога должна считать из файла строку в str (включая пробелы), после чего перезаписать в zone и пойти по файлу дальше. На деле правильно...

Из текстового файла считывается только первая строка
Считывается только первая строка, помогите найти ошибку. uses crt; const n=10; type student = record name : record ...

Работа с файлом: из файла считывается только последняя строка
По какой то причине считывает только последнею строку из файла. В чем проблема? #include &lt;stdio.h&gt; #define LEN 100 int...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru