• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль, файлы

hamchuk250894

Новые
Регистрация
9 Дек 2012
Сообщения
45
Реакции
0
Баллы
0
Паскаль, файлы

Посмотрите пожалуйста верно ли написана программа для таких вот заданий: Задание №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);
if (a < 0) and (x < 0) then
x := i;
if a > 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, ' ');
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 := 0;
for j := 1 to m do
begin
read(a[i, j]);
s := s + a[i, j];
end;
if s < 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.
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    11.1 KB · Просмотры: 64
  • Безымянный2.webp
    Безымянный2.webp
    13.6 KB · Просмотры: 64
Буду очень благодарен если поможете исправить ошибки, если они есть.
 
Буду очень благодарен если поможете исправить ошибки, если они есть.
Подробно посмотрю, когда будет время. А пока сразу претензия: в первом задании требуется работать с типизированными числовыми файлами, а не с текстовыми. Исправьте.
И еще вопрос: какой у Вас Паскаль? Потому что с файлами input, output, создаваемыми по умолчанию, я встречался только в ископаемом ANSI-Паскале и полагал, что подобная чушь давно и прочно забыта. Просветите, пожалуйста.
 
Я делаю через Pascal ABC.net, исправьте пожалуйста как время будет, потому что я не могу понять как там сделать.
 
Я просто пока новичок в программировании, а нам толком ничего не объясняют. Я над этой работой долго думал и уже ничего в голову не приходит.
 
Я просто пока новичок в программировании,
Да это я не в Ваш адрес, а по поводу АВС. Терпеть ненавижу, как говорил герой одного советского фильма. Ладно, посмотрю, как время выберу.
 
Посмотрите вариант первой задачи. Я сделал без массива, но с двумя файлами. Имена файлов и пути поправьте, как Вам надо. И не удивляйтесь, если, открыв в текстовом редакторе созданные программой файлы, Вы вместо чисел увидите непонятный набор символов. Так и должно быть, это свойство типизированных файлов. В отличие от текстовых.
Код:
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.
 
Владимир, у меня вылетает такая вот ошибка. И в файле написана только одна строка. Так и должно быть или что то не так?
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    41.4 KB · Просмотры: 109
Извените, поправил) Я просто одно и то же название давал двум файлам) Но у меня там написано всего по одной строчки в файлах, так и должно быть? И что насчет второго задания? Там все правильно?
 
Но у меня там написано всего по одной строчки в файлах, так и должно быть? И что насчет второго задания? Там все правильно?
Я же Вам объяснял (#9) про вид типизированных файлов. Да, так и должно быть.
Второе еще не смотрел.
 
Задание №2 Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с минимальной суммой элементов и столбец с максимальной суммой элементов. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Ну вот так у меня вторая вышла. Как обычно, имя файла и путь к нему поставьте свои.
Код:
Const
 m1=7;
 n1=5;
Var
 MassivNN,Q:Array[1..m1,1..n1] of Integer;
 v_min,v_max,Dummy,Min,Sum,Max:Integer;
 i,j,k,m,n,Imin,Jmax:byte;
 mn:Word;
 f:Text;

Begin
 Assign(f,'D:\xxx.txt');
 Rewrite(f);
 Randomize;
 Write('v_min= ');
 Readln(v_min);
 Write('v_max= ');
 Readln(v_max);
 for i:=1 to m1 do
  begin
   for j:=1 to n1 do
    begin
     MassivNN[i,j]:=v_min+Random(v_max-v_min);
     write(MassivNN[i,j]:4);
     write(f,MassivNN[i,j]:4);
    end;
   writeln;
   If i<m1 then writeln(f);
  end;
 Close(f);
 Writeln;
 Reset(f);
 n:=0;
 Repeat
  read(f,Dummy);
  Inc(n);
 Until EoLn(f);
 Reset(f);
 mn:=0;
 Repeat
  If Not(Eof(f)) then
   begin
    read(f,Dummy);
    Inc(mn);
   end;
 Until EoF(f);
 m:=mn div n;
 Reset(f);
 For i:=1 to m do
  For j:=1 to n do
   read(f,Q[i,j]);
 Close(f);
 Min:=v_max*n;
 Max:=v_min;
 for i:=1 to m do
  begin
   Sum:=Q[i,1];
   for j:=2 to n do Sum:=Sum+Q[i,j];
   if Sum<Min then
    begin
     Min:=Sum;
     Imin:=i;
    end;
  end;
 for j:=1 to n do
  begin
   Sum:=Q[1,j];
   for i:=2 to m do Sum:=Sum+Q[i,j];
   if Sum>Max then
    begin
     Max:=Sum;
     Jmax:=j;
    end;
  end;
 Writeln('Line (',Imin,') with minimal sum: ');
 For j:=1 to n do write(Q[Imin,j]:4);
 Writeln;
 Writeln;
 Writeln('Column (',Jmax,') with maximal sum:');
 For i:=1 to m do write(Q[i,Jmax]:4);
 Readln
End.
 
Владимир помогите пожалуйста. Код ко второму заданию верный но мне начиная с этого момента нужно сделать не используя массив. Каким образом это можно сделать?
For j:=1 to n do read(f,Q[i,j]); Close(f); Min:=v_max*n; Max:=v_min; for i:=1 to m do begin Sum:=Q[i,1]; for j:=2 to n do Sum:=Sum+Q[i,j]; if Sum<Min then begin Min:=Sum; Imin:=i; end; end; for j:=1 to n do begin Sum:=Q[1,j]; for i:=2 to m do Sum:=Sum+Q[i,j]; if Sum>Max then begin Max:=Sum; Jmax:=j; end; end;
 
Точнее вот с какого момента в коде нужно сделать не используя массив.
For j:=1 to n do read(f,Q[i,j]); Close(f); Min:=v_max*n; Max:=v_min; for i:=1 to m do begin Sum:=Q[i,1]; for j:=2 to n do Sum:=Sum+Q[i,j]; if Sum<Min then begin Min:=Sum; Imin:=i; end; end; for j:=1 to n do begin Sum:=Q[1,j]; for i:=2 to m do Sum:=Sum+Q[i,j]; if Sum>Max then begin Max:=Sum; Jmax:=j; end; end;
 
Владимир помогите пожалуйста. Код ко второму заданию верный но мне начиная с этого момента нужно сделать не используя массив. Каким образом это можно сделать?
К сожалению, помочь не могу. Ибо не дано мне понять, как в решении задачи о работе с двумерными массивами обойтись без массивов. Сожалею.
 
Я вот тоже этого понять не могу, а преподаватель требует это((
 
Владимир, я узнал у преподавателя что там нужно с того момента как я отметил работать уже через файл а не через массив как дано в задании. Помогите пожалуйста сделать, срочно надо.
 
Назад
Сверху