Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2007, 20:09   #1
Omedus
Пользователь
 
Аватар для Omedus
 
Регистрация: 01.11.2007
Сообщений: 27
Вопрос Из двух натуральных чисел, составить наибольшее число, сохраняя первоначальную последовательность.Паскаль

Помогите пожалуйста написать программу. Я понятия не имею, как это осуществить Заранее огромнейшее спасибо!
Вот задание: Из цифр двух натуральных чисел составить наибольшее возможное число, сохраняя первоначальную последовательность цифр.
Технические условия: Программа должна читать исходные числа из файла input.txt, и выводить полученное число в файл output.txt.
Примеры входных и выходных файлов:

Input1.txt
Код:
20
4181
Output1.txt
Код:
421810
Input2.txt
Код:
111
222
Output2.txt
Код:
222111
Input3.txt
Код:
97531
86420
Output3.txt
Код:
9876543210
Генерация случайных чисел — слишком важное дело, чтобы оставлять её на волю случая.
Scientia potentia est
Omedus вне форума Ответить с цитированием
Старый 18.11.2007, 22:45   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Алгоритм вроде как довольно прост:
1. Считываем все цифры из файла.
2. Распределяем их по убыванию.
3. Записываем в фаил.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 18.11.2007, 22:53   #3
Omedus
Пользователь
 
Аватар для Omedus
 
Регистрация: 01.11.2007
Сообщений: 27
Хорошо

Цитата:
Сообщение от Карась Посмотреть сообщение
Алгоритм вроде как довольно прост:
1. Считываем все цифры из файла.
2. Распределяем их по убыванию.
3. Записываем в фаил.
Тьфу! Спасибо огромное!!! Я просто не сообразил, что для этого их всего лишь по убыванию надо сделать! =)))))))) Спасибо!!!)))
Генерация случайных чисел — слишком важное дело, чтобы оставлять её на волю случая.
Scientia potentia est
Omedus вне форума Ответить с цитированием
Старый 18.11.2007, 23:06   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если цифры распределить по убыванию, нарушится их порядок, а это по условию задачи недопустимо.
puporev вне форума Ответить с цитированием
Старый 19.11.2007, 00:11   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Код:
program Project1;
{$APPTYPE CONSOLE}

var num_1, num_2: string;
    a: integer;
begin
Readln (num_1);
Readln (num_2);
 if num_1[1] = num_2[1] then a := 2;
   if num_1[a] > num_2[a] then
    write (num_1, num_2)
   else
     write (num_2, num_1);
Readln;
end.
Вот я реализовал такую штуку. Только без считывания файлов. И + маленький касяк )) Может быть неверно если первый цифры совпадают (мне просто лень там всё это продумывать)...

Например 22 и 20 он напишет 2022, что неверно....

Add: немного изменил код. Теперь чтоб программа скосячила нужно чтоб совпадали первые две цифры.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 19.11.2007 в 00:14.
Карась вне форума Ответить с цитированием
Старый 19.11.2007, 00:20   #6
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Второй вариант Если порядок цифр менять нельзя то существуют только два варианта такого числа и надо просто сравнить их:
Код:
program Project1;
{$APPTYPE CONSOLE}

var num_1, num_2: string;

begin
Readln (num_1);
Readln (num_2);

   if (num_1 + num_2) > (num_2 + num_1) then
    write (num_1, num_2)
   else
     write (num_2, num_1);

Readln;
end.
Этот код вроде лишён недостатков предыдущего кода.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 19.11.2007, 05:38   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
if (num_1 + num_2) > (num_2 + num_1) then
Вообще то в школе проходили, что от перемены мест слагаемых сумма не меняется.
Пока редактировал, не заметил сообщение от Zetrix. Писал примерно то же самое, поэтому см. следующий пост.

Последний раз редактировалось puporev; 19.11.2007 в 07:13.
puporev вне форума Ответить с цитированием
Старый 19.11.2007, 06:54   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Вообще то в школе проходили, что от перемены мест слагаемых сумма не меняется
вообще-то строки складываем, так что - меняется.
Алгоритм по убыванию - не правильно, измениться порядок.
По пробую словесно описать так, как я бы решил:
a, b - это строки (2 наших числа)
заводим 2 переменные Na, Nb - которые показывают на какой цифре мы остановились в a и b.
Потом сравниваем a[Na] и b[Nb].
Если a[Na]>b[Nb] то S:=S+a[Na]; Na:=Na+1;
Если a[Na]<b[Nb] то S:=S+b[Nb]; Nb:=Nb+1;
S - это строка-результат.
Повторяем это в цикле, до тех пор пока одно из чисел "закончится" Na=length(a) или Nb=length(b).
Потом к S прибавляем целиком то число, которое не "закончилось".

P.S.: напоминаю, что работаем мы со строками, поэтому прибавить число - это склеить 2 стоки
zetrix вне форума Ответить с цитированием
Старый 19.11.2007, 22:02   #9
Abbatik
Форумчанин
 
Аватар для Abbatik
 
Регистрация: 11.11.2007
Сообщений: 136
По умолчанию

вот мой вариант. По твоим тестам работает хорошо(свои тоже проверял
Код:
program ll;
var f:text;
k1,k2,d1,d2,k,e,i,n1,n2:integer;
s,s1,s2:string;
begin
assign(f,'input.txt');
reset(f);
readln(f,n1);
readln(f,n2);
close(f);
str(n1,s1);
str(n2,s2);
k1:=1;
k2:=1;
while k<=length(s1)+length(s2) do begin
val(s1[k1],d1,e);
val(s2[k2],d2,e);
if d1>d2 then begin
s:=s+s1[k1];
k1:=k1+1;
end
else
begin
s:=s+s2[k2];
k2:=k2+1;
end;
k:=k+1;
end;
assign(f,'output.txt');
rewrite(f);
writeln(f,s);
close(f);
end.
ICQ - 446037211
Abbatik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация последовательности псевдослучайных натуральных чисел с требуемым распределением вероятности elsin Фриланс 4 19.11.2008 08:57
программа считывающая пять целых чисел и определяющая, печатающая наибольшее и наименьшее число из них Syber Общие вопросы C/C++ 3 30.06.2008 22:39
Последовательность чисел с степенью до N SEREG@ Помощь студентам 4 15.06.2008 22:41
Наибольшее из трёх чисел в С++ Amen Общие вопросы C/C++ 19 08.03.2008 01:09