Cоставить программу, которая переводит ( несколько чисел, пользователь сам решает, когда закончить перевод ) числа из десятичной системы счисления в шестнадцатеричную. с пояснением и саму программу
Var s:string; n,a:integer; begin writeln('Введите число (Для закрытия проги введите 0)'); readln(n); while n<>0 do begin s:=''; while n <>0 do begin a:=n mod 16; case a of 0: s:=a+s; 1:s:=a+s; 2:s:=a+s; 3:s:=a+s; 4:s:=a+s; 5:s:=a+s; 6:s:=a+s; 7:s:=a+s; 8:s:=a+s; 9:s:=a+s; 10:s:='A'+s; 11:s:='B'+s; 12:s:='C'+s; 13:s:='D'+s; 14:s:='E'+s; 15:s:='F'+s; end; n:=n div 16; end; writeln(s); writeln('Введите число (Для закрытия проги введите 0)'); readln(n); end;end.
Это задача совсем не "за ". Количество чисел k2, которые делятся на два, равно целой части от n/2. Аналогично, k3=n/3 и k5/n/5. Вычтем все эти количества из общего количества чисел, равного n: k=n-(k2+k3+k5) и это даст примерное количество чисел, которые не делятся на 2, 3 и 5. Примерно оно потому, что мы не учли числа, которые одновременно делятся на 2 и 3, на 2 и 5, на 3 и 5. Т.е. числа, которые делятся на 6, 10 и 15 мы вычли дважды. Поэтому надо найти количество этих чисел и отнять их. k6=n/6, k10=n/10, k15=n/15 - по-прежнему делим нацело. И теперь за исправленное значение k принимаем k+(k6+k10+k15). И последнее. Есть еще числа, которые делятся одновременно на 2, 3 и 5, т.е. на 2*3*5=30. Таких чисел k30=n/30. И мы их дважды прибавили. Теперь делаем последнюю коррекцию k, получая : k-k30.
Окончательно формула расчета: k=n-(k/2+k/3+k/5)+(k/6+k/10+k/15)-k/30 при условии целочисленного деления.
То что мы проделали выше, носит название операции включения-исключения множеств. Программа получается совсем простой.
Sub abc() Dim n As Long n = InputBox("Введите натуральное N") If n < 0 Then n = Abs(n) 'Защита от дурака MsgBox n - (n \ 2 + n \ 3 + n \ 5) + (n \ 6 + n \ 10 + n \ 15) - n \ 30 End Sub
Const nmax=100; var a,b:array[1..nmax] of integer; i,j,n1,n2,s:integer; p:boolean; begin randomize; repeat write('Размер массива A = '); readln(n1); until n1 in [1..nmax]; writeln; writeln('Массив A: '); for i:=1 to n1 do begin a[i]:=random(15); write(a[i],' '); end; writeln; writeln; repeat write('Размер массива B = '); readln(n2); until n2 in [1..nmax]; writeln; writeln('Массив B: '); for i:=1 to n2 do begin b[i]:=random(15); write(b[i], ' '); end; s:=0; for i:=1 to n1 do begin p:=false; j:=1; while (j<=n2) and not p do if b[j]=a[i] then p:=true else inc(j); if p then inc(s,a[i]); end; writeln; writeln; writeln('Сумма = ',s); end.
s:string;
n,a:integer;
begin
writeln('Введите число (Для закрытия проги введите 0)');
readln(n);
while n<>0 do
begin
s:='';
while n <>0 do
begin
a:=n mod 16;
case a of 0: s:=a+s;
1:s:=a+s;
2:s:=a+s;
3:s:=a+s;
4:s:=a+s;
5:s:=a+s;
6:s:=a+s;
7:s:=a+s;
8:s:=a+s;
9:s:=a+s;
10:s:='A'+s;
11:s:='B'+s;
12:s:='C'+s;
13:s:='D'+s;
14:s:='E'+s;
15:s:='F'+s;
end;
n:=n div 16;
end;
writeln(s);
writeln('Введите число (Для закрытия проги введите 0)');
readln(n);
end;end.