С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/153: Рейтинг темы: голосов - 153, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 28.10.2009
Сообщений: 20

Чтение массива из файла.

28.10.2009, 22:43. Показов 31518. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите алгоритм чтения из текстового файла двумерного массива(матрицы).
Причём так, чтобы при считывании элементов из внешнего файла, составить новый массив, который в последующем можно будет обрабатывать в программе.

то есть если в файле такой массив:
14 23
25 11

То программа должна считать его так, чтобы:
Mas[1,1]=14
Mas[1,2]=23
Mas[2,1]=25
Mas[2,2]=11
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2009, 22:43
Ответы с готовыми решениями:

Чтение массива из файла
Есть текстовый файл. Выглядит он вот так: 5 3 3 4 5 7 1 2 3 8 9 Нужно прочитать массив из 3 строки. Из 2-ой у меня получается: ...

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

Запись - чтение двумерного массива в файл - из файла
Ребят, помогите пожалуйста к задаче https://www.cyberforum.ru/pascal/thread100714.html написать две процедуры записи массива в файл...

29
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
28.10.2009, 22:49
Pascal
1
2
3
for i:=1 to 2 do
for j:=1 to 2 do
read(f,mas[i,j]);
1
1 / 1 / 0
Регистрация: 28.10.2009
Сообщений: 20
29.10.2009, 00:57  [ТС]
спасибо, но
что делать, если в файле находится матрица, у которой кол-во строк и столбцов неизвестно?

Добавлено через 1 час 30 минут
что-то не понимаю, реально ли вообще это сделать? как ни стараюсь, ничего не выходит. да и инет весь обшарил, никто подобные задачи не рассматривал
0
55 / 53 / 24
Регистрация: 10.05.2009
Сообщений: 216
29.10.2009, 01:11
Ну Вы попробуйте считать размерность матрицы из файла..

Добавлено через 2 минуты
Пусть, например, в первой строке файла через пробел будет записана размерность матрицы, тогда считайте ее так:
Pascal
1
2
read(f,n);
read(f,m);
0
1 / 1 / 0
Регистрация: 28.10.2009
Сообщений: 20
29.10.2009, 01:14  [ТС]
дело в том, что не понимаю как. пытался вводить проверку на нули, но ничего не получилось.

Добавлено через 2 минуты
только что это сделал, в этом случае всё успешно работает, да.
но всё же есть ли способ считать "чистую" матрицу, без указания кол-ва столбцов и строк в файле с ней?
0
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
29.10.2009, 01:19
Если размерность матрицы - произвольный параметр, то обычно в начале файла пишут размерность матрицы, а уже после этого помещают данные. Если этого не сделать, то узнать размерность матрицы, основываясь только на колтчестве данных нельзя, т.к. нет возможности отличить данные матрицы 3х4 от матрицы 4х3.
0
55 / 53 / 24
Регистрация: 10.05.2009
Сообщений: 216
29.10.2009, 01:58
Думаю можно, представляю себе это так: считывается в 2 захода, сначала считывается количество строк и столбцов, затем закрывается файл, птом снова открывается и считывается сама матрица..

Добавлено через 37 минут
Затупил инет..((( Ну на вскидку число столбцов можно считать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
var f:text;
    n,m:integer;
    s:string;
begin
  -----------
  m:=0;
  while not eof (f) do
    begin
      readln(f,s);
      inc(m);
    end;
  -----------
3
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 02:04
2maxis1523, тебе разрешено описать размерность матрицы через константу в программе или нет? или все же для тебя нет разниицы? и еще вопрос матрица квадратная или произвольная???

Добавлено через 2 минуты
узнать размерность матрицы, основываясь только на колтчестве данных нельзя
2Страдалецъ, кто вам такое сказал???
0
55 / 53 / 24
Регистрация: 10.05.2009
Сообщений: 216
29.10.2009, 02:05
2Inadequate, насколько я понял он хочет считать матрицу из файла не зная до этого ее размерности, т.е. константой тебе ее задать нельзя..
1
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 02:17
2S2dent, красава а то Страдалецъ вводит в заблуждение окружающих...

Добавлено через 1 минуту
Цитата Сообщение от S2dent Посмотреть сообщение
насколько я понял он хочет считать матрицу из файла не зная до этого ее размерности, т.е. константой тебе ее задать нельзя..
ну это я уже понял, да и проблема в связи с твоим решением я так понял тоже решена.

Добавлено через 7 минут
2maxis1523, вот подредактированное и немного добавленное, но идея S2dent'a, так что не забываем ему нажимать на кнопочку спасибо...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  strok,stolb,ch:integer;
  f:text;
begin
  strok:=0;
  stolb:=0;
  assign(f);
  reset(f);
  {ñ÷èòûâàåì êîëè÷åñòâî ñòðîê}
  while not EOF(f) do
  begin
    read(f,ch);
    inc(strok)
  end;
  {ñ÷èòûâàåì êîëè÷åñòâî ñòîëáöîâ}
  while not EOLn(f) do
  begin
    read(f,ch);
    inc(stolb)
  end;
  ....
  close(f)
end.
2
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
29.10.2009, 07:47
Code
1
Страдалецъ вводит в заблуждение окружающих...
Ну и в чем-же я неправ?
Вот вам набор данных в файле:
1,2,3,4,5,6,7,8,9,10,11,12
Скажите, какой размер матрицы у меня предполагается?
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 07:58
Цитата Сообщение от maxis1523 Посмотреть сообщение
Здравствуйте, подскажите алгоритм чтения из текстового файла двумерного массива(матрицы).
Причём так, чтобы при считывании элементов из внешнего файла, составить новый массив, который в последующем можно будет обрабатывать в программе.
то есть если в файле такой массив:
14 23
25 11

То программа должна считать его так, чтобы:
Mas[1,1]=14
Mas[1,2]=23
Mas[2,1]=25
Mas[2,2]=11
2Страдалецъ, посмотрите еще раз задание... из него само собой разумеется что матрица задается построчно... а не как вы в одну строку...
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
29.10.2009, 08:03
Цитата Сообщение от Inadequate Посмотреть сообщение
узнать размерность матрицы, основываясь только на колтчестве данных нельзя
2Страдалецъ, кто вам такое сказал???
надо сначала еще разобраться как будет записана матрица в файл, если она будет вся записана в одну строку и она не будет квадратной то Страдалецъ прав, нельзя будет понять что за матрица получится.
если же матрица будет записана по строкам и столбцам то есть в виде таблице , то в этом случае прав S2dent, только для того что бы посчитать количество столбцов и строк надо будет открывать 2 раза файл, то есть что бы посчитать количество столбцов один раз , и что бы посчитать количество строк один раз, так что все зависит от условия, и в данном случае нельзя решить кто прав кто нет надо просто знать сначала как записана матрица что бы уже дальше разбираться

Добавлено через 3 минуты
что бы считать матрицу как в условие то надо сделать так
n-число строк
m-число столбцов
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
n:=0;
while not(eof(f)) do
 begin
  readln(f);
  n:=n+1;
 end;
m:=0;
while not(eof(f)) do
 begin
  read(f);
  m:=m+1;
 end;
m:=round(m/n);
1
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 08:11
2mamedovvms, надо просто смотреть на задание и исходить не из доводов и размышлений а из того что человеку нужно. в данном случае человек указал в задании как задается матрица:
...
то есть если в файле такой массив:
14 23
25 11

То программа должна считать его так, чтобы:
...
не понимаю к чему эти размышления. то что матрицу нельзя прочесть если она будет задана в строчку не зная ее размера(!исключения составляют квадратные матрицы) это и так ясно как белый день...

Добавлено через 3 минуты
Цитата Сообщение от mamedovvms Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
n:=0;
while not(eof(f)) do
 begin
 readln(f);
 n:=n+1;
 end;
m:=0;
while not(eof(f)) do
 begin
 read(f);
 m:=m+1;
 end;
m:=round(m/n);
2mamedovvms, а зачем писать то что уже написал S2dent???
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.10.2009, 08:23
Если знаем что в файле матрица но не знаем ее размер, то читаем построчно.
Сначала первую строку
readln(f,s);
считаем количество чисел в строке, если знать что числа точно через 1 пробел, то просто сосчитать пробелы+1. Но надежнее так.
Pascal
1
2
3
n:=0;
for i:=1 to length(s) do
if((s[i]=' ')and(s[i+1]<>' '))or(i=1)and(s[i]<>' ')) then n:=n+1;
дальше считаем строки, 1 уже есть.
Pascal
1
2
3
4
5
6
m:=1;
while not eof(f) do
 begin
  readln(f,s);
  m:=m+1;
 end;
Закрываем файл, снова открываем и читаем матрицу.
2
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 08:32
2mamedovvms,2Puporev, ребят вы чо сговорились... эту тему уже давно можно закрывать так как S2dent давно это высказал и написал...

Добавлено через 46 секунд
зачем писать по сто раз одно и то же...???
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
29.10.2009, 08:33
Цитата Сообщение от Inadequate Посмотреть сообщение
а зачем писать то что уже написал S2dent??
если вы внимательно посмотрите, то поймете что он написал толька для подсчета количества строк, хотя у него почему то написано что считает количество столбцов
2
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.10.2009, 08:36
Inadequate, Действительно, читайте внимательно, mamedovvms, прав, я сам хотел это написать. S2dent высказал верную мысль, но коряво написанную частичную реализацию.
1
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
29.10.2009, 08:38
Цитата Сообщение от Inadequate Посмотреть сообщение
зачем писать по сто раз одно и то же...???
у каждой задачи не одно правильное решение
1
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 08:57
2Puporev, 2mamedovvms, а чем #10 плох...???

Добавлено через 3 минуты
Цитата Сообщение от mamedovvms Посмотреть сообщение
у каждой задачи не одно правильное решение
да тут вы правы, но когда одно и тоже решение переписывать по нескольку раз это уже маразм...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2009, 08:57
Помогаю со студенческими работами здесь

Как осуществлять чтение массива из текстового файла?
подскажите

Чтение массива из файла
Одномерный массив считывается из файла исходных данных in.txt, а затем без изменений записывается в файл результатов out.txt . Конкретно...

Чтение текстового файла и заполнение массива символами из него
Добра всем! Такая проблема возникла , так как не силен в Паскале: Есть текстовый файл ,который заполнен текстом следующим образом - ...

Чтение из файла массива.
Я никак не могу написать программу для чтения с файла строк и записывания их в массив типа &quot;string&quot;. Turbo Pascal 7.0. И...

Чтение одномерного массива из текстового файла
В текстовом файле file3.txt находится последовательность целых чисел в виде одномерного массива. Как считать этот массив из файла, чтобы...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru