Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на паскале > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Nutka_Chayka
Добрый вечер!=)
Помогите, пожалуйста, решить вот такую задачу:


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


У меня вот что получилось, но это срабатывает только в том случае, если число например 1234. Если взять 4321 (то есть в конце стоит 1), то просто выдает исходное=(((

Как мне исправить это? Что нужно дописать, чтобы даже если к в конце стоит 1, срабатывало?

Очень-очень нужно...((



program lab5;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
n,b,a: Integer;


begin


Writeln ('vvedite chislo' );
If n<0 then n:=-n;
Readln (n);
a:=n mod 10;
b:=a;
n:=n div 10;

repeat
a:= (n mod 10) ;

if (a<>1) then begin b:=b*10+a;
end;
n:= n div 10;
while a=1 do a:= (n mod 10)


until n=0 ;

a:=b mod 10;
n:=a;
b:=b div 10;
repeat
a:= (b mod 10) ;
n:=n*10+a;

b:= b div 10;



until b=0 ;
write (n);


Readln;

end.
Sergio Ramos
Что если исходное число представить как массив цифр. Затем пройтись по этому массиву , заменив 1, к примеру, на -1. И по все тому же массиву восстановить новое число.
например, 2314

a0 a1 a2 a3
2 3 1 4

-------------

a0 a1 a2 a3
2 3 -1 4

Ответ 234

Если число отрицательное, то достаточно ввести какую-нибудь переменную sign и в конце домножить результат на sign.
Nutka_Chayka
Проблема была в том, что массивы нельзя было использовать( иначе я бы и сама решила ее, а так запуталась
Sergio Ramos
Ну ок. Паскаль не помню и не хочу вспоминать.


// ввели число n
...............

public static int parseNum(int n) {
int result = 0; // результирующее число
int sign = (n > 0) ? 1 : -1; // переменная, кот. отвечает за знак. если число положит.,то 1, иначе -1
int des = 1;// переменная, отвечающая за степень 10 при восстановлении результирующего числа
n = Math.abs(n); // возьмем исходное число по модулю, тк его знак мы уже учитываем
while (n > 0) {
int ch = n % 10; // отщепляем с конца очередную цифру
if (ch != 1) { // если она не 1, то спокойно приписываем к результату, домножив на соотв. степень 10
result += ch * des; //result = result+ ch*des;
des *= 10;
}
n /= 10;
}
return sign * result;// получаем новое число с учетом знака
}


***
a+=b <-> a=a+b
a*=b <-> a=a*b и т.д.
.......................
/ - это div
% - это mod
Julia
Цитата(Nutka_Chayka @ 4.10.2012, 1:00) *

Добрый вечер!=)
Помогите, пожалуйста, решить вот такую задачу:
Дано целое число. Получить новое число, удалив из исходного все единицы. Порядок цифр оставить прежним.
У меня вот что получилось, но это срабатывает только в том случае, если число например 1234. Если взять 4321 (то есть в конце стоит 1), то просто выдает исходное=(((

Как мне исправить это? Что нужно дописать, чтобы даже если к в конце стоит 1, срабатывало?

Очень-очень нужно...((
program lab5;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
n,b,a: Integer;
begin
Writeln ('vvedite chislo' );
If n<0 then n:=-n; //n еще не введено, что вы проверяете?
Readln (n);
a:=n mod 10;
b:=a; //последнюю цифру не проверив переносите в новое число
n:=n div 10;
b:=0; //правильная инициализация переменной b
repeat
a:= (n mod 10) ;

if (a<>1) then begin b:=b*10+a;
end;
n:= n div 10;
while a=1 do a:= (n mod 10) //ерунда какая-то
until n=0 ;

a:=b mod 10;
n:=a;
b:=b div 10;
repeat
a:= (b mod 10) ;
n:=n*10+a;

b:= b div 10;
until b=0 ;
write (n);
Readln;

end.


Можно вполне одним циклом обойтись и собирать число в "прямом" порядке. Считайте в цикле степень числа 10 и умножайте на очередную цифру.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.