С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/41: Рейтинг темы: голосов - 41, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 35
1

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел

13.06.2014, 16:09. Показов 8134. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с задачей не понимаю как решать ее дальше??
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел.Занести в файл q те компоненты файла f, которые встречаются в файле более одного раза.
Код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const n=10;
var f,q:file of integer;
    i,j,a,b,k:integer;
begin
assign(f,'text1');
assign(q,'text2');
rewrite(f);
rewrite(q);
for i:=1 to n do
begin
a:=random(10);
write(a,' ');
write(f,a);
end;
writeln;
reset(f);
read(f,a);
write(q,a);
while not eof(f) do
begin
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2014, 16:09
Ответы с готовыми решениями:

Заполнить файл целыми числами, полученными с помощью генератора случайных чисел
заполнить файл F 3n Целыми числами, полученными с помощью генератора случайных чисел. Записать в...

Заполнить файл последовательного доступа f целыми числами,получиными с помощью гинератора случайных чисел
Заполнить файл последовательного доступа f целыми числами,получиными с помощью гинератора случайных...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел.
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f...

Заполнить файл f натуральныи числами,полученными с помощю генератора случайных чисел
Заполнить файл f натуральныи числами,полученными с помощю генератора случайных чисел.Найти...

8
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
13.06.2014, 20:14 2
в начале программы забыли Randomize;
Pascal
1
2
3
begin
  Randomize;
  assign(f,'text1');
Pascal
1
2
3
4
writeln;
reset(f);
read(f,a);
write(q,a);
write(q,a); уберите. До тех пор, пока Вы не определили, встречается число неоднократно, его писать в выходной файл нельзя!

решать задачу можно разными способами.
В зависимости от разных конкрентных деталей.
Если размер файла позволяет его полностью загрузить в память (в статический массив или в динамический список), тогда рекомендую пройтись по входному файлу, прочитать его в память, потом определить те элементы, которые встречаются более одно раза и записать их в выходной файл.
Если же файл не может (или не должен) быть прочитан полностью в память, тогда Вам нужно в цикле читать входной файл, для каждого компонента определять, что он встречается не один раз.

Ну и ещё.
Цитата Сообщение от Robot01 Посмотреть сообщение
занести в файл q те компоненты файла f, которые встречаются в файле более одного раза.
если входной файл представлен числами 5 2 3 2 3 2 3 4 5 2
что должно быть в выходном файле?
(компоненты пишутся в выходной файл единожды или столько раз, сколько раз они присутствуют во входном файле?)
0
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 35
13.06.2014, 20:19  [ТС] 3
Sergio Leone, спасибо за начальную помощь!! а в вашем примере должно в выходном файле получиться: 5 2 3
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
13.06.2014, 20:38 4
не за что.
Вы насчёт способа определения повторяющихся записей определились?
Можно (искусственно) задаться граничным максимумом равным, скажем, 1000.
Т.е. объявляем массив a : array[1..1000] of Integer;
и читаем исходный файл в этот массив.
и дальше работаем только с этим массивом.
Разумеется, если во входном файле (вдруг) больше 1000 значений, то такой файл обработан данным кодом не может.
подходит?
0
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 35
13.06.2014, 20:46  [ТС] 5
Sergio Leone, да у меня массив максимум до 100 значений вполне достаточно будет смотреться, поэтому ваш вариант вполне удобен осталось как то это все красиво записать...
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
13.06.2014, 21:39 6
Лучший ответ Сообщение было отмечено Robot01 как решение

Решение

программа создания:
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
const MaxN=100;
  SrcFileName = 'data1.bin';
  
var f : file of integer;
    a : integer;
    i,n:integer;
begin
  WriteLn('Программа заполнения файла ',SrcFileName,' целыми числами');
  Randomize;
  repeat
    Write('Введите сколько чисел будет во входном файле: ');
    ReadLn(n);
  until (n>=1) and (n<=100);
  assign(f, SrcFileName );
  rewrite(f);
  for i:=1 to n do  begin
    a:=random(10);
    write(f,a);
  end;
  Close(f); {закрыли входной файл}
  
  // выведем содержимое файла пользователю
  Reset(f);
  WriteLn('Содержимое файла: ');
  while Not eof(f) do begin
    Read(f, a);
    Write(a,' ');
  end;
  WriteLn;
  Close(f);
  
end.
программа вывода в файл g
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
const MaxN=100;
  SrcFileName = 'data1.bin';
  OutFileName = 'data2.bin';
 
var f,g : file of integer;
    a : array[1..MaxN] of integer;
    i,n, j, k :integer;
begin
  WriteLn('Программа вывода повторяющихся элементов из файла ',SrcFileName,
          ' в файл ',OutFileName);
  assign(f, SrcFileName );
  reset(f);
  assign(g, OutFileName );
  rewrite(g);
 
  // прочитаем файл в массив
  i := 0;
  Reset(f);
  while Not eof(f) do begin
    inc(i);
    if i>MaxN then begin
      WriteLn('ВНИМАНИЕ!! В исходном файле БОЛЕЕ ',
         MaxN,' элементов! Все оставшиеся элементы игнорируем!');
      Break;
    end;
    Read(f, a[i]);
  end;
  Close(f);
  n := i; {количество прочитанных элементов в массив}
  
  for i:=1 to n do begin
    k := 0; {считаем, что a[i] ещё не встречалось ранее}
    for j:=1 to i-1 do
      if a[j] = a[i] then begin {если элемент есть раньше(до текущего), значит мы его уже обработали ранее}
        inc(k);
        Break;
      end;
    if k=0 then begin {если не было такого элемента ранее, ищем его в массиве дальше}
      for j:=i+1 to n do
        if a[j] = a[i] then begin {элемент есть после текущего, значит его нужно выводить в файл}
        Write(g, a[i]);
        Break;
      end;
    end;
  end;
  Close(g);
  WriteLn('Готово!');
  
  // выведем содержимое полученного файла пользователю
  Reset(g);
  WriteLn('Содержимое полученного файла ',OutFileName);
  while Not eof(g) do begin
    Read(g, k);
    Write(k,' ');
  end;
  WriteLn;
  Close(g);
 
end.
тестируйте/разбирайтесь...
1
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 35
13.06.2014, 21:42  [ТС] 7
Sergio Leone, ого, спасибо большое, это во многом мне поможет! Весь в процессе.
0
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
13.06.2014, 21:44 8
не за что.
я там комментировал некоторые моменты. Но, если будут вопросы по коду, спрашивайте, не стесняйтесь.
0
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 35
13.06.2014, 21:57  [ТС] 9
Sergio Leone, думаю если вопросы будут то завтра, у меня уже поздновато, завтра начну работу, СПАСИБО!
0
13.06.2014, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2014, 21:57
Помогаю со студенческими работами здесь

Заполнить в файл последовательного доступа Ф целыми числами, полученными
Заполнить в файл последовательного доступа Ф целыми числами, полученными с помощью генератора...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Вычислить...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел
Доброго всем времени суток...Помогите кто чем может)) 1.Заполнить файл f целыми числами,...

Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Вывести на экран...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru