Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль, файлы (http://www.tehnari.ru/f41/t82593/)

hamchuk250894 20.12.2012 11:55

Паскаль, файлы
 
Вложений: 2
Посмотрите пожалуйста верно ли написана программа для таких вот заданий: Задание №1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку отрицательное и последнее положительное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Оставить в файле только числа, находящиеся между ними.
Program Variant_8;
var n, i, x, y: integer;
a:array[0..20] of integer;

begin

WriteLn('Laboratornaya rabota #8_1');
WriteLn('Variant #8');
WriteLn('IS-12-2');
WriteLn('Hamchuk Evgeniy');
WriteLn;

writeln('Input of numbers, the end input - 0');
assign(output, 'C:\users\STEAM\output.txt'); rewrite(output);

n := -1;
x := -1;
y := -1;
while(true) do
begin
read(i);
if i = 0 then
break;
write(i, ' ');
n := n + 1;
end;

close(output);
assign(input, 'C:\users\STEAM\output.txt’); reset(input);
for i := 0 to n do
begin
read(a[i]);
if (a[i] < 0) and (x < 0) then
x := i;
if a[i] > 0 then
y := i;
end;

close(input);
assign(output, 'C:\users\STEAM\output.txt’); rewrite(output);
if x = -1 then
writeln('There are no negative numbers')
else if y = -1 then
writeln(' There are no positive numbers')
else
for i := x + 1 to y - 1 do
write(a[i], ' ');
end.
Задание №2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с минимальной суммой элементов и столбец с максимальной суммой элементов. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Program Variant_8;
var n, m, i, j, v_min, v_max, min, max: integer;
s : array [1..20] of integer;
a:array[1..20, 1..20] of integer;

begin

WriteLn('Laboratornaya rabota #8_2');
WriteLn('Variant #8');
WriteLn('IS-12-2');
WriteLn('Hamchuk Evgeniy');
WriteLn;

writeln('Inter v_min и v_max');
readln(v_min, v_max);

assign(output, 'C:\users\STEAM\output.txt'); rewrite(output);
writeln('4 5');
for i := 1 to 4 do
begin
for j := 1 to 5 do
write(random(v_max - v_min+1)+ v_min, ' ');
writeln;
end;

close(output);
assign(input, 'C:\users\STEAM\output.txt'); reset(input);

readln(n, m);
min := 1;
max := 1;
for i := 1 to n do
begin
s[i] := 0;
for j := 1 to m do
begin
read(a[i, j]);
s[i] := s[i] + a[i, j];
end;
if s[i] < s[min] then
min := i;
end;
close(input);

for j := 1 to m do
begin
s[j] := 0;
for i := 1 to n do
s[j] := s[j] + a[i, j];
if s[j] > s[max] then
max := j;
end;

assign(output, 'C:\users\STEAM\answer.txt'); rewrite(output);
writeln('Stroka s min summoy elementov - ', min);
writeln('Stolbec s max summoy elementov - ', max);
close(output);
end.

hamchuk250894 20.12.2012 16:39

Буду очень благодарен если поможете исправить ошибки, если они есть.

Vladimir_S 20.12.2012 16:51

Цитата:

Сообщение от hamchuk250894 (Сообщение 836307)
Буду очень благодарен если поможете исправить ошибки, если они есть.

Подробно посмотрю, когда будет время. А пока сразу претензия: в первом задании требуется работать с типизированными числовыми файлами, а не с текстовыми. Исправьте.
И еще вопрос: какой у Вас Паскаль? Потому что с файлами input, output, создаваемыми по умолчанию, я встречался только в ископаемом ANSI-Паскале и полагал, что подобная чушь давно и прочно забыта. Просветите, пожалуйста.

hamchuk250894 20.12.2012 17:02

Я делаю через Pascal ABC.net, исправьте пожалуйста как время будет, потому что я не могу понять как там сделать.

Vladimir_S 20.12.2012 17:06

Цитата:

Сообщение от hamchuk250894 (Сообщение 836313)
Я делаю через Pascal ABC.net

Понятно. Молчу, молчу, молчу. Всё-таки тут дамы...

hamchuk250894 20.12.2012 17:08

Я просто пока новичок в программировании, а нам толком ничего не объясняют. Я над этой работой долго думал и уже ничего в голову не приходит.

Vladimir_S 20.12.2012 17:24

Цитата:

Сообщение от hamchuk250894 (Сообщение 836315)
Я просто пока новичок в программировании,

Да это я не в Ваш адрес, а по поводу АВС. Терпеть ненавижу, как говорил герой одного советского фильма. Ладно, посмотрю, как время выберу.

hamchuk250894 20.12.2012 17:27

Хорошо. Заранее спасибо.

Vladimir_S 20.12.2012 20:45

Посмотрите вариант первой задачи. Я сделал без массива, но с двумя файлами. Имена файлов и пути поправьте, как Вам надо. И не удивляйтесь, если, открыв в текстовом редакторе созданные программой файлы, Вы вместо чисел увидите непонятный набор символов. Так и должно быть, это свойство типизированных файлов. В отличие от текстовых.
Код:

Program Variant_8;
var
 i,i1,i2,x: integer;
 f,f1:file of integer;

Begin

 WriteLn('Laboratornaya rabota #8_1');
 WriteLn('Variant #8');
 WriteLn('IS-12-2');
 WriteLn('Hamchuk Evgeniy');
 WriteLn;

 Assign(f,'D:\xxx');
 Rewrite(f);
 Writeln('Input of numbers, the end input - 0');

 i:=0;
 Repeat
  write('Element N',i,': ');
  readln(x);
  if x<>0 then write(f,x);
  Inc(i);
 Until x=0;
 Writeln;
 Close(f);

 Reset(f);
 Repeat
  read(f,x);
  write(x:4);
 Until EoF(f);
 Writeln;
 Writeln;

 i:=-1;
 i1:=-1;
 i2:=-1;

 Reset(f);
 Repeat
  Inc(i);
  Read(f,x);
  If x<0 then i1:=i;
 Until (x<0) or EoF(f);

 i:=-1;

 Reset(f);
 Repeat
  Inc(i);
  Read(f,x);
  If x>0 then i2:=i;
 Until EoF(f);

 If i1=-1 then
  Writeln('File contains no negative elements') else
 If i2=-1 then
  Writeln('File contains no positive elements') else
 If Abs(i2-i1)=1 then
  Writeln('There are no elements between first negatine and last positive') else
 begin
  if i1>i2 then
  begin
    x:=i1;
    i1:=i2;
    i2:=x;
  end;
  Reset(f);
  Assign(f1,'D:\yyy');
  Rewrite(f1);
  i:=-1;
  repeat
  inc(i);
  read(f,x);
  if (i>i1) and (i<i2) then write(f1,x);
  until EoF(f);
  Close(f);
  Close(f1);
  Reset(f1);
  repeat
  read(f1,x);
  write(x:4);
  until EoF(f1);
  Close(f1);
 end;
 Readln
End.


hamchuk250894 21.12.2012 13:52

Вложений: 1
Владимир, у меня вылетает такая вот ошибка. И в файле написана только одна строка. Так и должно быть или что то не так?


Часовой пояс GMT +4, время: 02:48.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.