Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
30 / 29 / 15
Регистрация: 28.09.2011
Сообщений: 449
1

За один просмотр файла вывести все числа, сумма цифр которых наименьшая

05.10.2012, 20:43. Показов 775. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
дана последовательность целых чисел, за один просмотр файла вывести все числа, сумма цифр которых наименьшая.
не пойму, как это "за один просмотр файла"? поможете с кодом программы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2012, 20:43
Ответы с готовыми решениями:

За один просмотр файла, вывести числа сумма цифр которых больше А
Дано файл натуральных чисел. За один просмотр файла, вывести числа сумма цифр которых больше А.

Найти и вывести все числа в интервале, у которых все сумма цифр совпадает с суммой цифр данного числа
Ребята, всем привет. Задали в паскале выполнить следующее задание: Дано натуральное число N.Найти и...

Найти и вывести все числа в интервале от 1 до N-1, у которых сумма всех цифр совпадает с суммой цифр данного числа.
Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N-1, у которых сумма всех...

Найти и вывести все числа в интервале от 1 до N - 1, у которых сумма всех цифр совпадает с суммой цифр данного числа
Дано натуральное число N. Найти и вывести все числа в интервале от 1 до N - 1, у которых СУММА ВСЕХ...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32833 / 21170 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
05.10.2012, 22:10 2
Ну, поскольку программа на стеки - то, вероятно, придется писать структуру данных - стек (на форуме были примеры, пользуйся поиском), и потом проходить по файлу. Один раз, от начала и до конца, больше переходить в начало файла и читать его повторно - нельзя. Это и есть
Цитата Сообщение от gylayko Посмотреть сообщение
"за один просмотр файла"
Читаешь число. Считаешь сумму его цифр. Если она такая же, как и у числа, которое на вершине стека, то добавляешь прочитанное число в стек. Если она меньше - то выталкиваешь всё из стека (опустошаешь его), и заталкиваешь туда это самое число.

После того, как таким образом обработаешь все числа, записанные в файле, у тебя в стеке будут только числа. сумма цифр которых минимальна. Печатаешь содержимое стека, и всё, задача выполнена.
1
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.10.2012, 22:14 3
Цитата Сообщение от gylayko Посмотреть сообщение
не пойму, как это "за один просмотр файла"?
То есть за полтора просмотра файла - это ты понимаешь, так ?


Цитата Сообщение от gylayko Посмотреть сообщение
поможете с кодом программы?
Возможно и поможем, но не раньше чем ты продемонстрируешь свое понимание решения для любого иного кол-ва просмотров файла.
0
30 / 29 / 15
Регистрация: 28.09.2011
Сообщений: 449
06.10.2012, 19:18  [ТС] 4
я прошу пардона! вот мои наработки, итак
сначала создаем типы
Delphi
1
2
3
4
5
6
7
8
9
10
11
uses crt;
type
 fil=record;
 chislo:integer;
end;
ftype=file of fil;
pok=^prt;
prt=record
 inf:fil;
 next:pok;
end;
потом инициализируем элементы
Delphi
1
2
3
4
5
6
7
8
var f:ftype; s:fil; L:pok; x:integer; m,stakc:integer;
procedure Init (var s:fil);
begin
 with s do
  begin
   ch:=random(100);
  end;
end;
потом записываем все это в файл
Delphi
1
2
3
4
5
6
7
8
9
Procedure Init2 (var f:ftype);
Var s1:fil;
begin
 rewrite(f);
init(s1);
 write (f,s1);
 init(s1);
close(f);
end;
теперь инициализируем стек
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure Init1 (var L:pok; var f:ftype; var m,stack:integer);
var h:pok; d:fil;
begin
 reset(f);
  L:=nill;
  m:=0;
  stack:=0;
while not eof(f) do
 begin
  read(f,d);
   with d do
    begin
      if d.ch>m
       then m:=d.ch;
      end;
new(h);
h^.inf:=d;
h^.next:=L;
L:=h;
stack:=stack+1;
end;
close(f);
end;
и печатаем стек
Delphi
1
2
3
4
5
6
7
8
9
Procedure druck(var L:pok(;
begin
 if L=nil
  then writeln('конец стека');
   else begin
    Memo1.Text:=IntToStr(L^.inf.ch);
   druck(L^.next);
  end;
end;
я так понимаю, что дальше нужно назвать файл
Delphi
1
2
Label1.Text:=name;
assign(f,name)
дальше, я так понимаю, нужно, собственно, найти эти элементы (сума цифр которых наименьшая), процедура такая
Delphi
1
2
3
4
5
     s:=0;
     while ( x < > 0 ) do begin
       s := s + (x mod 10);
       x := x div 10;
     end;
но как это применить к основной программе? в переменных я совсем запутался. помогите составить единый код.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32833 / 21170 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.10.2012, 21:18 5
gylayko, я ленивый, не хочется делать то, что уже делалось много раз на форуме - создавать еще раз класс стека - поэтому взял готовый, тем более, что Delphi XE2 это позволяет. Но сам алгоритм должен быть понятен (напишешь свой класс стека, и просто заменишь то, что есть у меня на свою реализацию. Все названия методов - стандартные, для добавления в стек - Push, для извлечения - Pop, для проверки элемента на вершине - Peek, а не твои непонятные druck-и)
Delphi
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
60
61
62
63
64
65
66
67
68
var
  f : file of integer;
  stack : TStack<Integer>;
 
procedure TForm1.Button1Click(Sender: TObject);
  function GetSum(n : Integer) : Integer;
  begin
    Result := 0;
    while n <> 0 do
    begin
      Inc(Result, n mod 10);
      n := n div 10;
    end;
 
  end;
var
   Sum, SavedSum, Value : Integer;
begin
  stack := TStack<Integer>.Create;
 
  AssignFile(f, ExtractFilePath(Application.ExeName) + 'test.dat');
  Reset(f);
  while not Eof(f) do
  begin
    Read(f, Value);
    Memo1.Lines.Add(IntToStr(Value));
 
    Sum := GetSum(Value);
 
    if stack.Count > 0 then
    begin
      SavedSum := GetSum(stack.Peek);
      if Sum = SavedSum then stack.Push(Value)
      else
        if Sum < SavedSum then
        begin
          stack.Clear;
          stack.Push(Value);
        end;
    end
    else stack.Push(Value);
  end;
  CloseFile(f);
 
  Memo1.Lines.Add('Results');
  while stack.Count > 0 do
  begin
    Memo1.Lines.Add(IntToStr(stack.Pop));
  end;
 
  stack.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject); // при старте создаем файл с числами
var
  i, j : Integer;
begin
  Randomize;
 
  AssignFile(f, ExtractFilePath(Application.ExeName) + 'test.dat');
  Rewrite(f);
  for i := 1 to 100 do
  begin
    j := Random(5000);
    Write(f, j);
  end;
  CloseFile(f);
end;
0
06.10.2012, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2012, 21:18
Помогаю со студенческими работами здесь

Дано натуральное число n. Найти и вывести все числа в интервале от 1 до n − 1, у которых сумма всех цифр совпадает с суммой цифр данного числа.
Дано натуральное число n. Найти и вывести все числа в интервале от 1 до n − 1, у которых...

За один просмотр файла вывести сначала все числа, меньшие а
Товарищи, помогите написать программу. С меня вознаграждение в размере 100-150 рублей. Условие...

Найти и вывести все пары соседних элементов, в которых сумма цифр первого числа больше суммы цифр второго
Дан массив целых чисел. Найти и вывести все пары соседних элементов, в которых сумма цифр первого...

Создать файл целых чисел. За один просмотр файла вывести на экран сначала все четные числа, а потом все нечетные
Помогите пожалуйста написать программу. Создать файл целых чисел. За один просмотр файла вывести на...

Вывести все трехзначные числа, у которых сумма их цифр является делителем этого числа
Требуется помощь с задачей. Был бы безумно благодарен за помощь. Вывести все трехзначные числа,...

Вывести все 2-значные числа, у которых сумма цифр равна 12
Чтобы по 100 раз не писать выложу сразу 6 задач(Разделю на две темы) Напишите только полное...


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

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