Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 20:00   #1
m1croN
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 10
По умолчанию Запись из файла в двумерный массив

Здравствуйте!
Имеется файл Input.txt, содержащий числа (в четырех строчках по два числа, разделенных пробелом). Как эти числа записать в двумерный массив? Вот то, что я накидал тут.. но паскаль ругается и выдает различные ошибки. Подскажите пожалуйста что я делаю не так. Заранее спасибо!

Код:
program z13b;
uses crt;
type mas=array [1..10000] of array[1..10000] of longint;
const n=4;
var i,a,b,j:integer;
y,u:mas;
f:file of integer;
c,d:mas;
begin
assign(f,'Input.txt');
reset(f);
for i:=1 to n do
begin
for j:=1 to 2 do 
begin
read(f,c[i,j]);
end;
end;
end.

Последний раз редактировалось ACE Valery; 19.02.2012 в 21:09.
m1croN вне форума Ответить с цитированием
Старый 19.02.2012, 20:45   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
type mas=array [1..4,1..2] of longint;
const n=4;
var i,a,b,j:integer;
y,u:mas;
f:file of integer;
c,d:mas;
begin
assign(f,'Input.txt');
reset(f);
for i:=1 to n do
  begin
    for j:=1 to 2 do
//      begin     //нафиг не надо
        read(f,c[i,j]);
//      end;
      readln(f)
  end;
end.
Кстати, зачем массив такой огромный? O_o
Все тривиальное просто

Последний раз редактировалось whatever; 19.02.2012 в 20:55. Причина: mas=array [1..10000] of array[1..10000] of longint; - это сильно
whatever вне форума Ответить с цитированием
Старый 19.02.2012, 20:48   #3
m1croN
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 10
По умолчанию

Числа будут от 1 до 10 000
Ошибочка

Последний раз редактировалось m1croN; 19.02.2012 в 20:51.
m1croN вне форума Ответить с цитированием
Старый 19.02.2012, 20:54   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от m1croN Посмотреть сообщение
Числа будут от 1 до 10 000
Б**, только сейчас заметил...
Во-первых, что бы работало замени
Код:
mas=array [1..10000] of array[1..10000] of longint;
на
Код:
mas=array [1..10000,1..10000] of longint;
Во-вторых, Сам же написал
Цитата:
в четырех строчках по два числа, разделенных пробелом
А значит тебе хватит
Код:
mas=array [1..4,1..2] of longint;
update: Еще можно const перед type написать, а массив задать так:
Код:
mas=array [1..n,1..2] of longint;
Так будет правильнее и логичнее
Все тривиальное просто

Последний раз редактировалось whatever; 19.02.2012 в 21:00.
whatever вне форума Ответить с цитированием
Старый 19.02.2012, 20:58   #5
m1croN
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 10
По умолчанию

mas=array [1..10000,1..10000] of longint;
Пардоньте, но по-моему эти числа в скобках указывают на диапазон чисел, которые могут быть в массиве, или нет?
И даже так, как вы написали, не работает.
m1croN вне форума Ответить с цитированием
Старый 19.02.2012, 21:11   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

To m1croN: Эти числа указывают размерность массива. Вам не мешало бы книжку почитать по Паскалю.

To whatever:
Цитата:
Во-первых, что бы работало замени
Код:
mas=array [1..10000] of array[1..10000] of longint;
на
Код:
mas=array [1..10000,1..10000] of longint;
Насколько я знаю, оба способа объявления двумерных массивов правильны.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 19.02.2012 в 21:13.
ACE Valery вне форума Ответить с цитированием
Старый 19.02.2012, 21:22   #7
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
mas=array [1..10000,1..10000] of longint;
Пардоньте, но по-моему эти числа в скобках указывают на диапазон чисел, которые могут быть в массиве, или нет?
И даже так, как вы написали, не работает.
Доучились, называется, до второго семестра, таких вещей не знать...
Прога простая до невозможности, но с легкой руки автора в ней просто невероятное количество подводных камней, про которые даже не подумаешь



ACE Valery, хм, согласен, мой косяк, динамические только так и задаются. Просто для статических массивов ну ОЧЕНЬ непривычная форма записаи.
Все тривиальное просто

Последний раз редактировалось whatever; 19.02.2012 в 21:27.
whatever вне форума Ответить с цитированием
Старый 19.02.2012, 21:27   #8
m1croN
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 10
По умолчанию

Спасибо. А если мне неизвестно количество строк, это количество прописано в первой строчке самого файла, а уже дальше идут n строчек по два числа, как мне тогда описать массив?

Последний раз редактировалось m1croN; 19.02.2012 в 21:37.
m1croN вне форума Ответить с цитированием
Старый 19.02.2012, 21:31   #9
m1croN
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 10
По умолчанию

whatever, спасибо. И я не студент, а ученик 11-го класса. Просто у нас в школе такие задачки не делают, а мне олимпиаду писать, вот и не все знаю, прошу прощения, если моя неграмотность вас раздражает
m1croN вне форума Ответить с цитированием
Старый 19.02.2012, 21:36   #10
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от m1croN Посмотреть сообщение
Спасибо. А если мне неизвестно количество строк, это количество прописано в самом файле, как мне тогда описать массив?
Два варианта:
1. Объявляешь массив заведомо бОльшего размера (что, впринципе ты и делел):
Код:
mas=array [1..10000,1..2] of longint;//предполагается, что в файле не более 10000 строк
Но это плохой вариант.
2. Динамический массив, т.е. его размерность устанавлевается уже в теле программы.

В обоих случаях считывать через for нецелесообразно, рекомендую while с EOF и EOLN.
Update: ну да, если знания из школы, то понятно. Напиши пример того, что хранится в input.txt, я тебе програмку накидаю, которая будет работать независимо от количества строк.
Все тривиальное просто

Последний раз редактировалось whatever; 19.02.2012 в 21:39.
whatever вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как обработать двумерный массив из файла _LEX_ Помощь студентам 6 02.01.2012 18:56
Запись из файла в массив It is not me Общие вопросы C/C++ 1 22.09.2011 20:59
Запись в двумерный массив Vova777 Общие вопросы Delphi 2 02.09.2011 20:57
Ввод с файла в двумерный массив Qlry Общие вопросы C/C++ 1 14.05.2011 22:26
запись с файла в массив darkmonk Общие вопросы C/C++ 2 29.11.2009 20:21