Задан вектор T(n) n>= 15. Сформировать вектор D из тех элементов массива Т, в десятичной записи которых не встречается заданная цифра С
Чудная тема.
Чувство, что нас воспринимают как роботов-решателей задач для лентяяев. Кинул условие - получил решение с пояснениями.
мисс_граффити
Хорошее чувство
asu2006
Ты так не думаешь?
Хорошая задачка. Вроде, не встречалась, ранее. Занес в задачник.
Люди помогите хотя бы алгоритмом
для начала напиши функцию, которая будет определять, есть ли в числе определенная цифра. Если очень лень думать, и очень хорошо поискать по форуму, ты найдешь как разбить число на цифры с и без использованием строк. Подобные задачи решались десятки раз.
const n=15;
type
vector=array[1..n] of byte;
var
T, B: vector;
I,k: integer;
begin
for i:=1 to n do
begin
if (i>0) and (i<=11) then
k:=48;
k:=k+i;
write('T[', i,'] ');
writeln('B[', chr(k),']');
if (i>12) and (i<=15) then
k:=67;
k:=k+i;
write('T[', i,'] ');
writeln('B[', chr(k),']');
end;
readln;
end.
эм ... что-то такое:
uses crt;
const
MAX_N = 15;
type
TArray = array [1..MAX_N] of Integer;
procedure Input(var arr: TArray; const n: Integer);
var
i: Integer;
begin
for i := 1 to n do begin
write('arr[', i, '] = '); readln(arr[i]);
end;
end;
procedure Print(const arr: TArray; const n: Integer);
var
i: Integer;
begin
if n = 0 then
writeln('empty ...');
writeln;
for i := 1 to n do write(arr[i]:4);
end;
function IncludeValue(const source, value: Integer): Boolean;
var
_source: Integer;
begin
if source = 0 then IncludeValue := value = 0 else begin
_source := source;
while (_source > 0) and ((_source mod 10) <> value) do
_source := _source div 10;
IncludeValue := _source > 0;
end;
end;
procedure CreateNewArray(const arr: TArray; var new_arr: TArray;
const n: Integer; var m: Integer; const value: Integer);
var
i: Integer;
begin
m := 0;
for i := 1 to n do
if not IncludeValue(arr[i], value) then begin
inc(m);
new_arr[m] := arr[i];
end;
end;
var
t, d: TArray;
n, m, c: Integer;
begin
clrscr;
write('n = '); readln(n);
write('c = '); readln©;
Input(t, n);
CreateNewArray(t, d, n, m, c);
Print(d, m);
readln;
end.
Как вариант:
const
n_max = 15;
var
arr, res: array[1 .. n_max] of integer;
my_set: set of byte;
n, T, i, size: integer;
C: byte;
begin
write('n = '); readln(n);
for i := 1 to n do begin
write('arr[', i:2, '] = ');
readln(arr[i]);
end;
write('C = '); readln©;
size := 0;
for i := 1 to n do begin
T := arr[i]; my_set := [];
while T > 0 do begin
include(my_set, T mod 10);
T := T div 10;
end;
if not (C in my_set) then begin { <--- Исправлено }
inc(size); res[size] := arr[i];
end;
end;
for i := 1 to size do
write(res[i]:4);
writeln;
end.
Ну раз пошла такая пьянка, вариант со строкой.
const
n_max = 15;
var
arr, res: array[1 .. n_max] of integer;
tmp: String;
n, i, size: integer;
C: byte;
begin
write('n = '); readln(n);
for i := 1 to n do begin
write('arr[', i:2, '] = ');
readln(arr[i]);
end;
write('C = '); readln©;
size := 0;
for i := 1 to n do begin
Str(arr[i], tmp);
if Pos(Chr(48 + C), tmp) = 0 then begin
inc(size); res[size] := arr[i];
end;
end;
for i := 1 to size do
write(res[i]:4);
writeln;
end.
А предыдущие посты прочесть - "не царское это дело"? Или поменять название переменной с Arr на T и Res на B - это задача непосильно сложная? А, я понял... Завтра ты опять придешь и перепечатаешь то же самое еще раз, только вместо буквы "B" будет "A", так? 26 букв в латинском алфавите... Тема станет "горячей"...
ппц ... закрыто.