0)
const ARRAY_SIZE=100; // размер массива в файле
1)
c:integer <- который элемент по диагонали
n:integer <- текущий элемент
i,integer;
flag:boolean;
2)
c:=1; flag:=false;
for i:=1 to ARRAY_SIZE do begin
for k:=1 to c do begin
read(f,n);
end;
if (not(n=1)) begin Then Writeln('Ne edinicniy massiv'); flag:=true; break; end;
end;
if(not(flag)) then writeln('Edinicniy massiv!!!');
Матрица в Файле [Pascal]
Пусть матрица А целых чисел размером Х*Х записана по строкам в файл. Определите, является ли она единичной. (файл типизированный)
Как я думаю:
1. Выбираем размерность матрица и заводим соответственное кол-во переменных типа String - s1,s2,s3.....
2. Ну там создаём файл... и тд и тп...
3. Просим пользователя ввести эти самые строки... и записываем их в файл (как? как перейти на другую строку?)
4. Дальше читаем файл и проверем на наличие единиц и нулей на соответствующих местах.... (опять же как перейти на другую строку)
5. Выводим матрицу и пишем Ответ: да/нет..... (как выводить?)
Помогите пожалуйста... рад буду любой помощи (даже исходнику=)))))
если правильно я понял задачу то особые переменные string не нужны
по 1 числу считываем смотрим это 0 или 1 если 1 стоит ли на нужном месте (диагональ)
все
Получается, что вся матрица записана в одну строчку? А как тогда протчитать нужное место для 1?
размер по условию задачи дан X
то есть X раз делаем read(f,a) a:integer а потом readln(f) // перевод на новую строчку
Цитата: *alt
Задача.
Пусть матрица А целых чисел размером Х*Х записана по строкам в файл. Определите, является ли она единичной. (файл типизированный)
Пусть матрица А целых чисел размером Х*Х записана по строкам в файл. Определите, является ли она единичной. (файл типизированный)
Не вяжется. Если файл типизированый, то матрица не может быть записана по строках, потому что файл бинарный а не текстовый. Виясните сначала етот аспект, потому что он в корень меняет ввод/вывод.
Или опишите задачу четко или же
пишите то что вам не ясно.
Пусть матрица А целых чисел размером 100*100 записана по строкам в файле. Определите, является ди она единичной.
Задача в теме ТИПИЗИРОВАННЫЕ файлы (простите за БОЛЬшие буквы). Больше тут ничего не написано....
Не знаю что насчет типизированных файлов, но в обычном текстовом решается даже без использования массива ))
Ну в таком случае приводи свой тип, так называемый record.
По нему и будем ориентироватся дальше.
Хотя если не имеет принципиальной разницы, можно( и даже лучше) использовать
простой текстовый файл, и метод который я показал выше.
Код:
program matrix;
uses crt;
const SIZE=100;
var
f:file of string;
st:string;
i,k:integer;
flag:boolean;
begin
assign(f,'file.type');
{создание файла}
rewrite(f);
for i:=1 to SIZE do begin
for k:=1 to SIZE do
begin
if k=i then st[k]:='1' else st[k]:='0';
end;
write(f,st);
end;
close(f);
{создание файла}
reset(f);
flag:=true;
for i:=1 to SIZE do
begin
read(f,st);
for k:=1 to SIZE do begin
if (st[k]='0') and (k=i) then begin flag:=false; end;
if (st[k]='1') and (k<>i) then begin flag:=false; end;
end;
end;
close(f);
if flag=true then writeln('Единичная') else writeln('Неидиничная');
readln;
end.
uses crt;
const SIZE=100;
var
f:file of string;
st:string;
i,k:integer;
flag:boolean;
begin
assign(f,'file.type');
{создание файла}
rewrite(f);
for i:=1 to SIZE do begin
for k:=1 to SIZE do
begin
if k=i then st[k]:='1' else st[k]:='0';
end;
write(f,st);
end;
close(f);
{создание файла}
reset(f);
flag:=true;
for i:=1 to SIZE do
begin
read(f,st);
for k:=1 to SIZE do begin
if (st[k]='0') and (k=i) then begin flag:=false; end;
if (st[k]='1') and (k<>i) then begin flag:=false; end;
end;
end;
close(f);
if flag=true then writeln('Единичная') else writeln('Неидиничная');
readln;
end.
Будет где-то так, вывод и ввод еще можно сделать.
Цитата:
f:file of string;
- Такого не может быть....
....не один пост не приблизил к истине .... пока....
Всё же надо с типизированным файлом работать:(
Вроде просто записать в файл и проверить....
но... как мне кажется нужно записать матрицу в одну строчку (подряд все символы), а потом проверить, но не знаю как перескакивать на нужное место.... НУ короче в тупике пока.....
Чел, у меня учебник лежит по Pascal на столе. Типизированные файлы задаются предложением вида <имя_файла> = FILE of <имя_типа>. Если ты знаешь еще какие типизированые файлы - будь добр сообщи.
f:file of string;
в паскале такое может быть ;)
никаких проблем
но это точно не то что нужно в этой задаче
если типизированный файл то это скорее всего f:file of integer (какие еще типизированные с целыми числами)
но тогда неясно что значит запись по строкам - запись по строкам имеет место в f:text
Код:
uses crt;
type MX=array[1..100,1..100] of word;
var M:MX;
FileName:string;
procedure Gen(Var M:MX);
var x,y:word;
begin;
for y:=1 to 100 do
for x:=1 to 100 do
M[X,Y]:=random(1000);
end;
procedure Save(N:string);
var x,y:word;
t:text;
begin;
assign(T,N);
rewrite(T);
for y:=1 to 100 do
begin
for x:=1 to 100 do
write(T,M[x,y]);
writeln(T);
end;
close(T);
end;
procedure Load(N:string);
var x,y:word;
t:text;
begin;
assign(T,N);
reset(T);
for y:=1 to 100 do
begin
for x:=1 to 100 do
read(T,M[x,y]);
readln(T);
end;
close(T);
end;
begin;
randomize;
Gen(M);
write('Enter Name File'); readln(FileName);
Save(FileName);
readln;
end.
type MX=array[1..100,1..100] of word;
var M:MX;
FileName:string;
procedure Gen(Var M:MX);
var x,y:word;
begin;
for y:=1 to 100 do
for x:=1 to 100 do
M[X,Y]:=random(1000);
end;
procedure Save(N:string);
var x,y:word;
t:text;
begin;
assign(T,N);
rewrite(T);
for y:=1 to 100 do
begin
for x:=1 to 100 do
write(T,M[x,y]);
writeln(T);
end;
close(T);
end;
procedure Load(N:string);
var x,y:word;
t:text;
begin;
assign(T,N);
reset(T);
for y:=1 to 100 do
begin
for x:=1 to 100 do
read(T,M[x,y]);
readln(T);
end;
close(T);
end;
begin;
randomize;
Gen(M);
write('Enter Name File'); readln(FileName);
Save(FileName);
readln;
end.
[COLOR="Red"]Оформлять код по правилам при помощи тегов [ code ] [ /code ].[/COLOR]модератор.