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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 14:39   #1
eragon_ua
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 25
По умолчанию Число....

Здравствуйте... Помогите пожалуйста написать прогу...

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

Тут речь идет именно о 6-и значном числе,а не о массиве. Думал может сделать так :
вводим число (например число а)
а = 123456
в этом числе а1 = 1; а2 = 2; а3 = 3; а4 = 4; а5 = 5; а6 = 6
Потом использовать целочисленное деление... а потом сравнить числа... например, а1 и а2, а2 и а3...

Одним словом - не знаю.... помогите...=)
eragon_ua вне форума Ответить с цитированием
Старый 08.03.2011, 14:58   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Потом использовать целочисленное деление...
это вполне логично.

Цитата:
например, а1 и а2, а2 и а3...
а это - НЕТ!

Смотрите, можно решить эту задачку через разложение и сохранение всех цифр числа в отдельный массив.
Тогда задача будет состоять из двух частей.
1) разложить число на цифры, которые сохраняются в массив.
2) проход по массиву и поиск подходящих цифр.

либо, более красиво, но и сложнее можно сделать без сохранения цифр в массив - сразу, как получили очередную цифру, складывать её с предыдущей и сравнивать полученную сумму, подходит данная пара или нет. Но в данном алгоритме прийдётся хранить предыдущую цифру.

Какой вариант выбрать - решать Вам. Мне кажется первый вариант чуть-чуть проще для понимания..

вот, для затравки разложения числа на цифры в массиве:
Код:
var A[1..11] of integer; {максимум допускает 11-значное число}
  CntInArray : integer; {сколько цифр в массиве}
  Num : LongInt; {наше исходное число}
  OneDigit : integer;
begin
  CntInArray := 0;
  while Num>0 do begin
      OneDigit := Num mod 10;
      inc(CntInArray);
      A[CntInArray] :=  OneDigit;
      Num := Num div 10;
  end;
  {проверка на нулевое число}
  if CntInArray = 0 then begin
     Inc(CntInArray);
     A[CntInArray] := 0; 
  end; 

всё. Теперь число по одной цифре записано в массив A
количество цифр в числе в переменной CntInArray
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.03.2011, 15:39   #3
eragon_ua
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 25
По умолчанию

Спасибо Вам за решение и советы.
Я еще плохо разбираюсь в программировании, Паскале. И хотел решить без массивов... только с помощью "div" и "mod".. =)

Вот например так.. У меня похожее задание и решение...

Ввести из клавиатуры шестизначное число, определить позицию первой цифры, которая превышает заданную цифру пользователем, и вывести ее.
Код:
Program Chislo;
uses crt;
var A,
 a1,a2,a3,a4,a5,a6,h:longint;
begin
     clrscr;
     write('vveditb 6x-znachne chislo=');
     readln(A);
     A:=abs(A);
     write('vveditb chislo vid 1 do 9=');
     readln(h);
     write('zufru chisla A=');
     a1:=A div 100000;
     write(' a1=',a1);
     a2:=A div 10000 mod 10;
     write(' a2=',a2);
     a3:=A div 1000 mod 10;
     write(' a3=',a3);
     a4:=A div 100 mod 10;
     write(' a4=',a4);
     a5:=A div 10 mod 10;
     write(' a5=',a5);
     a6:=A mod 10;
     writeln(' a6=',a6);
     write('pozucija pershogo chusla jake bilshe za h=');
     if a1>h then write('1') else if a2>h then write('2') else if a3>h then write('3')
      else if a4>h then write('4') else if a5>h then write('5')
     else if a6>h then write('6') else write('nema');
     end.

Последний раз редактировалось Stilet; 08.03.2011 в 19:49.
eragon_ua вне форума Ответить с цитированием
Старый 08.03.2011, 16:50   #4
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
Подмигивание

Цитата:
Сообщение от eragon_ua Посмотреть сообщение
И хотел решить без массивов... только с помощью "div" и "mod".. =)
непонимаю зачем столько мароки?
Код:
uses crt;
var x:Longint;
    i, c, n, j, x1, s : integer;
begin
writeln('Заданное число');
readln(s);
writeln('Шестизначное число');
read(x);
n := 5;
c := 1;
for j := 1 to n do
    c := c * 10;
j := x div c;
c := c div 10;
while (n>=1) do
begin
    x1 := j;
    j := (x div c) mod 10;
    if j + x1 > s then writeln(j,' ',x1);
    dec(n);
    c := c div 10;
end;
end.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 08.03.2011, 20:50   #5
eragon_ua
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 25
По умолчанию

Летучий_СкилетиК, спасибо большое. Эм.. у меня пишет ошибку " Division by zero". Что-то с делением на ноль или с моим компилятором...=(
eragon_ua вне форума Ответить с цитированием
Старый 08.03.2011, 21:06   #6
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от eragon_ua Посмотреть сообщение
у меня пишет ошибку " Division by zero". Что-то с делением на ноль или с моим компилятором...=(
, щас посмотрю
p.s, странно у меня вродибы работает на все тесты.

Последний раз редактировалось Летучий_СкилетиК; 08.03.2011 в 21:27.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 09.03.2011, 00:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

разрядности integer не хватает чтобы вместить c = 100000
достаточно c описать как LongInt:
Код:
var x, c :Longint;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.03.2011, 20:44   #8
eragon_ua
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 25
По умолчанию

Оо.. Спасибо.
Программа показывает только те цифры которые рядом, а вот что делать с суммой я даже не знаю...=(
eragon_ua вне форума Ответить с цитированием
Старый 15.03.2011, 00:50   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Программа показывает только те цифры которые рядом, а вот что делать с суммой я даже не знаю...=(
Шутить изволите?!
Вас программа спрашивает два числа - 'Заданное число' и 'Шестизначное число'
Так вот, выводятся не "только те цифры которые рядом" - а те, сумма которых больше заданного числа! (которые Вы вводите первым!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.03.2011, 22:54   #10
eragon_ua
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 25
По умолчанию

Извините, извините..
Не полностью разобрался с алгоритмом....
eragon_ua вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано вещественное число X и целое число N (> 0). Вывести X – X3/3! + X5/5! – ... + (–1)NX2N+1/(2N+1)!? Ахилес Помощь студентам 2 20.05.2010 20:34
Написать программу, которая за меньшее число ходов отгадывает загаданное число gomz007 Помощь студентам 16 08.11.2009 12:57
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным Rid Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2008 16:50
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43