IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> разбиение числа
medved777
сообщение 7.02.2007 10:04
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Женский

Репутация: -  0  +


Пожалуйста, помогите исправить программу. Очень прошу.
Условия задачи

Дано число. Удалить минимальную цифру


 program pract7_2;
const nm=100;
type tmasm=array[1..nm] of longint;
var i,col,k,n:byte; ch,p:longint; z,kol:tmasm;m:real;
procedure razb(ch:longint;var k:byte;var z:tmasm);
begin
k:=0;
while ch<>0 do begin
inc(k);
z[k]:=ch mod 10;
ch:=ch div 10;end;
end;
function min(n:byte;kol:tmasm):real;
var i:byte;mn,m:real;
begin
mn:=kol[1];
for i:=1 to n do
if kol[i]<mn then mn:=kol[i];
if kol[i]=mn then min:=mn;
m:=min(n,kol);
end;
begin
writeln;
writeln('vvedite chiclo');
read(ch);
razb(ch,col,z);
k:=0;
z[i]:=z[n-i+1];
for i:=1 to col do
if z[i]<>m then begin inc(k);z[k]:=z[i];end;
p:=z[k];
case z[i] of
0..9:p:=p*10+z[i];
10..99:p:=p*100+z[i];
end;
writeln('preobrazovanoe chiclo:');
writeln(p);
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 7.02.2007 10:24
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


function min(n:byte;kol:tmasm):real;
var i:byte;mn,m:real;
begin
mn:=kol[1];
for i:=1 to n do
if kol[i]<mn then mn:=kol[i];
if kol[i]=mn then min:=mn; {вот это выполняется не в цикле. так и задумано?}
m:=min(n,kol);
end;


begin
writeln;
writeln('vvedite chiclo');
read(ch);
razb(ch,col,z);
k:=0;
z[i]:=z[n-i+1]; {что такое i? типа тут должен быть цикл? и вообще, что эта строка должна делать?}
for i:=1 to col do
if z[i]<>m then {что такое m и чему оно равно? на real может дать "не равно", даже если тебе кажется, что "равно"}
begin inc(k);z[k]:=z[i];end;
p:=z[k];
case z[i] of {опять же - что за i?}
0..9:p:=p*10+z[i];
10..99:p:=p*100+z[i];
end;
writeln('preobrazovanoe chiclo:');
writeln(p);
end.

разберись с границами циклов...
+если не сложно, поясни, что ты делаешь...
по-моему, много лишнего - если задача именно такая, как здесь написано.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 7.02.2007 11:01
Сообщение #3


Гость






Для начала, функция min должна выглядеть либо так:
function min(n:byte;kol:tmasm):byte;
var i:byte;mn,m:byte;
begin
mn:=kol[1];
for i:=2 to n do
if kol[i]<mn then mn:=kol[i];
min:=mn;
end;
либо так:
function min(n:byte;kol:tmasm):byte;
var i:byte;
begin
if n=1 then min:=kol[1] else begin
i:=min (n-1,kol);
if kol[n]<i then min:=kol[n] else min:=i;
end;
end;

У тебя что-то среднее, да и не вызывается она нигде.. пропустил наверное m:=min (col,z); И real везде убери - ни к чему он.
 К началу страницы 
+ Ответить 
volvo
сообщение 7.02.2007 12:06
Сообщение #4


Гость






Цитата
Дано число. Удалить минимальную цифру
Введено число 121...

Что будешь удалять?
 К началу страницы 
+ Ответить 
medved777
сообщение 7.02.2007 15:14
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Женский

Репутация: -  0  +


Вероятно, предполагается, что минимальная цифра одна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.02.2007 15:58
Сообщение #6


Гость






Я бы делал без перевода в строку... Если дано число - работаем с числом:

function min(X: integer): integer;
var T: integer;
begin
if X < 10 then min := X
else begin

T := min(X div 10);

if X mod 10 < T then min := X mod 10
else min := T;

end;
end;

function delete_digit(X, digit: integer): integer;
var T, ten: integer;
begin
T := 0; ten := 1;
while X > 0 do begin

if X mod 10 <> digit then begin
T := T + ten * (X mod 10);
ten := ten * 10;
end;

X := X div 10;

end;
delete_digit := T;
end;

var
X: integer;
begin
write('X = '); readln(X);
writeln('result = ', delete_digit(X, min(X)));
end.
(убирает как одну, так и несколько минимальных цифр)...
 К началу страницы 
+ Ответить 
medved777
сообщение 8.02.2007 8:17
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Женский

Репутация: -  0  +


Огромное преогромное спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.02.2007 10:48
Сообщение #8


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Что-то вспомнил я про эту задау, перед тем как запостить решение, смотрю, 1 в 1 как у Volvo smile.gif Щас подумал и вот еще одно решение, с одним циклом, но только для чисел с одной минимальной цифрой

function _delete(const n: LongInt): LongInt;
var
_result, temp, tenPower: LongInt;
min: Byte;

begin

temp := n; tenPower := 10;

min := 255;

while temp > 0 do begin

if temp mod 10 < min then begin
min := temp mod 10;
_result := (n div tenPower) * tenPower div 10;
if tenPower > 10 then
_result := _result + n mod (tenPower div 10);
end;

temp := temp div 10; tenPower := tenPower * 10;
end;

_delete := _result;
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"