Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
freejack
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 9
#1

Сгенерировать два тридцатизначных числа и используя функции вычислить их сумму и разность - Turbo Pascal

23.10.2017, 11:22. Просмотров 147. Ответов 8

Сгенерировать два тридцатизначных числа и при помощи функций вычислить их сумму и разность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2017, 11:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сгенерировать два тридцатизначных числа и используя функции вычислить их сумму и разность (Turbo Pascal):

Даны два действительных числа x и y. Вычислить их сумму, разность, произведение и частное - Turbo Pascal
а)F=x^2(x^2+1) б)Даны два действительных числа x и y. Вычислить их сумму, разность, произведение и частное. в) при любых исходных...

Даны два действительных числа х и у. Вычислить их сумму, разность, произведение и частное. - Pascal
Здраствуйте)порошу решить мне следующую задачу, пожалуйста=) Тема: Создание собственного модуля. Компиляция модулей. Вызов модуля из...

Даны два числа. Числа вводятся с клавиатуры. Найти их сумму, разность, произведение и частное. - Turbo Pascal
Здравствуйте. Пожалуйста напишите: Даны два числа. Числа вводятся с клавиатуры. Найти их сумму, разность, произведение и частное.

Даны два действительных числа А и В. Получить их сумму, разность и произведение - Turbo Pascal
Даны два действительных числа А и В. Получить их сумму, разность и произведение

Даны два ненулевых числа. Найти их сумму, разность, произведение и частное - Turbo Pascal
1. Даны два ненулевых числа. Найти их сумму, разность, произведение и частное.

Даны два ненулевых числа. Найти их сумму, разность, произвеение и частное - Turbo Pascal
даны два ненулевых числа.найти их сумму,разность,произвеение и частное.

8
Puporev
Модератор
52835 / 40646 / 13894
Регистрация: 18.05.2008
Сообщений: 94,316
23.10.2017, 16:20 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Функции здесь не подходят, лучше процедуры. Если уж совсем невтерпеж, переделаем.
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
uses crt;
const n=30;
type mas=array[1..n+1] of integer;
{процедура генерации числа}
procedure gen(var s:mas;k:byte);
var i:byte;
begin
s[1]:=1+random(9);
for i:=2 to n do
s[i]:=random(10);
writeln(k,' число');
for i:=1 to n do
write(s[i]);
writeln;
end;
{функция сравнения чисел}
function srav(a,b:mas):boolean;
var i:byte;
    s1,s2:string;
    f:boolean;
begin
f:=true;{пусть первое больше второго}
for i:=n downto 1 do {идем с конца к началу}
if a[i]<>b[i] then f:=a[i]>b[i];{сравниваем цифры в масивах}
srav:=f;{последнее сравнение}
end;
{процедура получения суммы}
procedure summa(a,b:mas;var c:mas);
var i,j,p,m:byte;
begin
p:=0; {перенос}
for i:=n downto 1 do
 begin
  c[i]:=a[i]+b[i]+p;{складываем цифоы двух чисел+перенос}
  if (c[i]>9)and(i>1) then{если больше 9 и не первая цифра}
   begin
    c[i]:=c[i] mod 10;{пишем  остаток от деления на 10}
    p:=1;{перенос=1}
   end
  else p:=0;{иначе перенос=0}
 end;
m:=n; {запомним длину массива}
if c[1]>9 then {если первая цифра}
 begin
  c[1]:=c[1] mod 10;{пишем остаток от деления на 10}
  m:=m+1;{добавим один разряд}
  for j:=m downto 2 do{сдвинем вправо}
  c[j]:=c[j-1];
  c[1]:=1; {первая цифра=1}
 end;
writeln('Сумма');
for i:=1 to m do
write(c[i]);
writeln;
end;
{процедура получения разности}
procedure raznost(a,b:mas;var c:mas);
var i,m:byte;
begin
for i:=n downto 1 do {идем с конца}
if a[i]>=b[i] then  c[i]:=a[i]-b[i]{если 1 цифра больше, вычитаем }
else
 begin
  c[i]:=a[i]+10-b[i]; {иначе вычитаем и +10}
  if i>1 then dec(a[i-1]);{занимаем 1 из старшего разряда если он не первый}
 end;
m:=n;{запомним длину массива}
if c[1]=0 then {если первый 0}
 begin
  for i:=1 to m-1 do {сдвинем массив на 1 влево}
  c[i]:=c[i+1];
  dec(m){уменьшим длину на 1}
 end;
writeln('Разность');
for i:=1 to m do
write(c[i]);
end;
var a,b,a1,b1,c:mas;
    m,i,j,p:byte;
begin
clrscr;
randomize;
gen(a,1);
gen(b,2);
summa(a,b,c);
if srav(a,b) then raznost(a,b,c){вычитаем из большего меньшее}
else raznost(b,a,c);
readln
end.
1
freejack
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 9
23.10.2017, 22:26  [ТС] #3
Puporev, в том то и прикол, что необходимы функции.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3604 / 2301 / 1197
Регистрация: 22.11.2013
Сообщений: 6,138
24.10.2017, 09:33 #4
Сравнение можно сделать так:
Pascal
1
2
3
4
5
6
function IsLess(a, b: mas): Boolean;
var j: Integer;
begin
  j:=1; while (j<n) and (a[j]=b[j]) do Inc(j);
  IsLess:=a[j]<b[j];
end;
1
Puporev
Модератор
52835 / 40646 / 13894
Регистрация: 18.05.2008
Сообщений: 94,316
24.10.2017, 09:35 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
С функциями так с функциями, только они какие-то не настоящие, суррогаты процедур. Настоящие функции должны
возвращать результат массив, типа
Pascal
1
function summa(a,b:mas):mas;
Но Турбо Паскаль не позволяет возвращать массив как результат функции, в боле развитых диалектах языка это можно.
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
uses crt;
const n=30;
type mas=array[1..n+1] of integer;
{функция генерации числа}
function gen(var s:mas;k:byte):byte;
var i:byte;
begin
s[1]:=1+random(9);
for i:=2 to n do
s[i]:=random(10);
writeln(k,' число');
for i:=1 to n do
write(s[i]);
writeln;
gen:=1;
end;
{функция сравнения чисел}
function srav(a,b:mas):boolean;
var i:byte;
    s1,s2:string;
    f:boolean;
begin
f:=true;{пусть первое больше второго}
for i:=n downto 1 do {идем с конца к началу}
if a[i]<>b[i] then f:=a[i]>b[i];{сравниваем цифры в массивах}
srav:=f;{последнее сравнение}
end;
{функция получения суммы}
function summa(a,b:mas;var c:mas):byte;
var i,j,p,m:byte;
begin
p:=0; {перенос}
for i:=n downto 1 do
 begin
  c[i]:=a[i]+b[i]+p;{складываем цифры двух чисел+перенос}
  if (c[i]>9)and(i>1) then{если больше 9 и не первая цифра}
   begin
    c[i]:=c[i] mod 10;{пишем  остаток от деления на 10}
    p:=1;{перенос=1}
   end
  else p:=0;{иначе перенос=0}
 end;
m:=n; {запомним длину массива}
if c[1]>9 then {если первая цифра}
 begin
  c[1]:=c[1] mod 10;{пишем остаток от деления на 10}
  m:=m+1;{добавим один разряд}
  for j:=m downto 2 do{сдвинем вправо}
  c[j]:=c[j-1];
  c[1]:=1; {первая цифра=1}
 end;
writeln('Сумма');
for i:=1 to m do
write(c[i]);
writeln;
summa:=1;
end;
{функция получения разности}
function raznost(a,b:mas;var c:mas):byte;
var i,m:byte;
begin
for i:=n downto 1 do {идем с конца}
if a[i]>=b[i] then  c[i]:=a[i]-b[i]{если 1 цифра больше, вычитаем }
else
 begin
  c[i]:=a[i]+10-b[i]; {иначе вычитаем и +10}
  if i>1 then dec(a[i-1]);{занимаем 1 из старшего разряда если он не первый}
 end;
m:=n;{запомним длину массива}
if c[1]=0 then {если первый 0}
 begin
  for i:=1 to m-1 do {сдвинем массив на 1 влево}
  c[i]:=c[i+1];
  dec(m){уменьшим длину на 1}
 end;
writeln('Разность');
for i:=1 to m do
write(c[i]);
raznost:=1;
end;
var a,b,c:mas;
    i:byte;
begin
clrscr;
randomize;
i:=gen(a,1);
i:=gen(b,2);
i:=summa(a,b,c);
if srav(a,b) then i:=raznost(a,b,c){вычитаем из большего меньшее}
else i:=raznost(b,a,c);
readln
end.
1
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3604 / 2301 / 1197
Регистрация: 22.11.2013
Сообщений: 6,138
24.10.2017, 09:46 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Функции:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type pmas=^mas;
 
function Add(const a, b: mas; var r: mas): pmas;
var j, c: Integer;
begin
  c:=0;
  for j:=n downto 1 do begin
    r[j]:=a[j]+b[j]+c; c:=0;
    if r[j]>10 then begin
      Dec(r[j],10); Inc(c);
    end;
  end;
  Add:=@r;
end;
Добавлено через 9 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function Sub(const a, b: mas; var r: mas): pmas;
var j, c: Integer;
begin
  c:=0;
  for j:=n downto 1 do begin
    r[j]:=a[j]-b[j]-c; c:=0;
    if r[j]<0 then begin
      Inc(r[j],10); Inc(c);
    end;
  end;
  Sub:=@r;
end;
1
Puporev
Модератор
52835 / 40646 / 13894
Регистрация: 18.05.2008
Сообщений: 94,316
24.10.2017, 09:49 #7
Pascal
1
function Sub(const a, b: mas; var r: mas): pmas;
и чем это лучше
Pascal
1
function Sub(const a, b: mas; var r: mas): byte;
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3604 / 2301 / 1197
Регистрация: 22.11.2013
Сообщений: 6,138
24.10.2017, 10:16 #8
чем? Возвращаемое значение имеет хоть какое-то отношение к результату.

Добавлено через 4 минуты
Ну и выражения можно строить
Pascal
1
  Add(Add(a,b,p)^,Add(c,d,q)^,r);
Добавлено через 20 минут
Кстати, возвращать можно флаг переноса/заёма -- будет индикатор переполнения, тоже не бессмысленный результат:
Pascal
1
2
3
4
5
6
7
8
9
10
function Add(const a, b: mas; var r: mas): Integer;
...
  Add:=c;
end;
...
  j:=1;
  if Add(a,b,r)=0 then
    while (j<n) and (r[j]=0) do Inc(j)
  else Write(1);
  for j:=j to n do Write(r[j]); WriteLn;
0
Puporev
Модератор
52835 / 40646 / 13894
Регистрация: 18.05.2008
Сообщений: 94,316
24.10.2017, 10:38 #9
freejack, Если ты настолько продвинут что понимаешь о чем пишет bormant, воспользуйся его подсказками, он плохому не научит.
0
24.10.2017, 10:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2017, 10:38
Привет! Вот еще темы с ответами:

Даны два ненулевых числа. Найти сумму, разность, произведение и частное их модулей. - Pascal
Составить программу для решения задачи: даны два ненулевых числа. Найти сумму, разность, произведение и частное их модулей.

Если данные два числа простые, то у большего числа вычислить сумму цифр - Turbo Pascal
Даны натуральные числа M и N. Если оба числа простые, то у большего числа вычислить сумму цифр, если же оба числа составные, то у каждого...

Не используя стандартные функции вычислить сумму - Turbo Pascal
не используя стандартные функции (за исключением a,b,s) выч сумму след элем. заданной точностью E&gt;0 (E,x,a вводятся с клавиатуры)

Вычислить сумму: 1!+2!+3!+…+n!, используя функцию вычисления факториала числа k - Turbo Pascal
1. Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k. С меня &quot;+&quot; и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.