Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 05.12.2012, 16:02   #1 (permalink)
Black_Betty
Member
 
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Паскаль. Задача на типизированный файл

Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Отсортировать файл по возрастанию.
Как отсортировать файл?
Замечание:
Прежде всего, прошу не относиться наплевательски к Правилам форума, в частности, запрещающим именования тем типа "Помогите", "Help!!!" и т.п. В следующий раз тема с подобным названием будет, как того требуют Правила, удалена.

Модератор
Black_Betty вне форума   Ответить с цитированием

Старый 05.12.2012, 16:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Проблема должна решиться быстрее, если ознакомиться с подобными темами

Задача на Паскаль
Задача, Паскаль

Старый 05.12.2012, 16:04   #2 (permalink)
Black_Betty
Member
 
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

написать надо в паскале
Black_Betty вне форума   Ответить с цитированием
Старый 05.12.2012, 16:12   #3 (permalink)
AVI_TOR
Member
 
Регистрация: 04.12.2012
Сообщений: 48
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black_Betty Посмотреть сообщение
написать надо в паскале
А Вы вообще сами можете хотя бы начать? а то получается так: "Сам не хочу, пусть ботаники потеют, а я потом пятерку получу"
AVI_TOR вне форума   Ответить с цитированием
Старый 05.12.2012, 16:15   #4 (permalink)
Black_Betty
Member
 
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я могу только создать этот файл, а как отсортировать вообще не представляю
Black_Betty вне форума   Ответить с цитированием
Старый 05.12.2012, 16:15   #5 (permalink)
AVI_TOR
Member
 
Регистрация: 04.12.2012
Сообщений: 48
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

К тому же поиск в инете никто не запрещал. По ключевым словам очень много инфы вывалилось, та что батенька: "Ищущий да обрящет"
AVI_TOR вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 05.12.2012, 16:19   #6 (permalink)
AVI_TOR
Member
 
Регистрация: 04.12.2012
Сообщений: 48
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

пробуй:
10. Метод швидкого сортування.
В основу метода покладена ідея послідовного дроблення масиву на частини.Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Const N=10;
Var A: array[1..N] of integer;
i:integer;
Procedure Quick(first,last:integer);
Var i,j,x,w,linteger;
Begin
I:=first;
J:=last;
X:=A[(first+last) div 2];
Repeat
While A[i]>x do i:=i+1;
While x>A[j] do j:=j-1;
If i<=j then begin
W:=A[i];
A[i]:=A[j];
A[j]:=w;
I:=i+1;
J:=j-1;
End;
until i>j;
if first<j then Quick(first,j);
if i<last then quick(i,last);
end;
Begin
For i:=1 to N do begin
Writeln(‘введи елемент масиву’);
Readln(A[i]);
End;
Quick(1,N);
writeln('Масив після сортування:');
writeln;
for i:=l to N do write(A[i]:5);
writeln;
end.
AVI_TOR вне форума   Ответить с цитированием
Старый 05.12.2012, 16:28   #7 (permalink)
Black_Betty
Member
 
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Во-первых эта программа не работает.
Во-вторых у меня не массива когда я создаю файл.
Black_Betty вне форума   Ответить с цитированием
Старый 05.12.2012, 16:47   #8 (permalink)
AVI_TOR
Member
 
Регистрация: 04.12.2012
Сообщений: 48
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Отсюда можешь основу взять, а дальше все просто:
Код:
Uses crt;
var f:file of integer;
    a,b,mx1,mx2,mn1,mn2,imx1,imx2,imn1,imn2,i,k1,k2,k:integer;
begin
//создание файла
assign(f,'file');
rewrite(f);
writeln('Введите в файл целые числа, окончание ввода 0:');
repeat
read(a);
if a<>0 then write(f,a);
until a=0;
clrscr;
//вывод на экран
writeln('Содержание исходного файла:');
reset(f);
//если нет 2 элементов
if filesize(f)<2 then
 begin
  writeln('Вы ввели менее двух чисел, поиск не возможен');
  close(f);
  exit;
 end;
 //если есть
while not eof(f) do
 begin
  read(f,a);
  write(a,' ');
 end;
writeln;
seek(f,0); //в начало файла
read(f,a);//первое число
seek(f,1);
read(f,b); //второе
if a>b then //выбираем первые мин и макс
 begin
  mx1:=a;
  imx1:=0;
  mx2:=b;
  imx2:=1;
  mn1:=b;
  imn1:=1;
  mn2:=a;
  imn2:=0;
 end
else
 begin
  mx1:=b;
  imx1:=1;
  mx2:=a;
  imx2:=0;
  mn1:=a;
  imn1:=0;
  mn2:=b;
  imn2:=1;
 end;
 //если только 2 элемента, удалять нечего
if filesize(f)=2 then
 begin
  writeln('Второе максимальное=',mx2,' его позиция=',imx2);
  writeln('Второе минимальное =',mn2,' его позиция=',imn2);
  writeln('Элементов для удаления нет');
  close(f);
  exit;
 end;
// если больше
for i:=2 to filesize(f)-1 do //от третьего до последнего
 begin
  seek(f,i);
  read(f,a);
  if a>mx1 then //первый макс
   begin
    imx2:=imx1;//старый первый удет вторым
    mx2:=mx1;
    imx1:=i;
    mx1:=a; //первй новый
   end
  else if a>mx2 then//если второй
   begin
    imx2:=i;
    mx2:=a;//он сменится, первый нет
   end;
  if a<mn1 then  //так же с минимальными
   begin
    imn2:=imn1;
    mn2:=mn1;
    imn1:=i;
    mn1:=a;
   end
  else if a<mn2 then
   begin
    imn2:=i;
    mn2:=a;
   end;
 end;
writeln('Первый максимальный=',mx1,' второй=',mx2,' его индекс=',imx2);
writeln('Первый минимальный =',mn1,' второй=',mn2,' его индекс=',imn2);
if imx2<imn2 then //если макс меньше, поменяем
 begin
  a:=imx2;
  imx2:=imn2;
  imn2:=a;
 end;
writeln('Удаляем элементы с номерами ',imn2+2,'...',imx2);//номер на 1 больше индекса
if imx2-imx1<=2 then //если они рядом
 begin
  write('Элементов для удаления нет');
  close(f);
  exit;
 end;
k:=0;
for i:=imx2 to filesize(f)-1 do//от 2 макс до конца
 begin
  seek(f,i);
  read(f,a);
  k:=k+1;
  seek(f,imn2+k);//все поднимем вверх за 2 мин
  write(f,a);
 end;
seek(f,filesize(f)-(imx2-imn2-1));//отступаем от конца на кол. удаляемых элементов
truncate(f);//обрезаем пустое
seek(f,0); //вывод результата
writeln('Удаление элементов между вторым минимальным и вторым максимальным:');
while not eof(f) do
 begin
  read(f,a);
  write(a,' ');
 end;
close(f);
end.
AVI_TOR вне форума   Ответить с цитированием
Старый 05.12.2012, 16:49   #9 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 290
Поблагодарили 512 раз(а) в 169 сообщениях
Репутация: 93301
По умолчанию

Цитата:
Сообщение от Black_Betty Посмотреть сообщение
Я могу только создать этот файл, а как отсортировать вообще не представляю
Считать числа из файла в массив, упорядочить одним из методов, описанных здесь и полученный упорядоченный массив вновь записать в файл.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 05.12.2012, 19:00   #10 (permalink)
Black_Betty
Member
 
Регистрация: 26.10.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Можете считать меня полной идиоткой, но я не знаю как считать числа из файла и наоборот.
Black_Betty вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.