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

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

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

 
 Ответить  Открыть новую тему 
> подпрограмма, замена данного натурального числа
сообщение
Сообщение #1


Пионер
**

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

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


Здравствуйте! У меня вопрос по задачке...
Нужно заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке (напр., дано число 156, нужно получит 651).
Я делала через строку, у меня все запускалось, все было правильно.. но сказали переделать другим способом, так как мне даны числа, а не строка...


Program Perevernut;
function perevertysh (p:integer):integer;
var S,a,a1,a2,a3:integer;
begin
write('Vvedite 3-x znachnoe chislo');
readln(a);
a1:=a mod 10;
a:=a div 10;
a2:=a mod 10;
a3:=a div 10;
S:=a1+a2+a3;
writeln();
readln
end.


Я стала решать так.. но дальit до меня не доходит.. я понимаю, что надо сделать так, чтобы первое вставало на место последнего, второе - на место предпоследнего.. но как это сделать - не знаю. Помогите пож-та.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Замечательные числа
"Определить, является ли число палиндромом (без его преобразования в строку)" - там есть составление "обратного" числа...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 15.12.2006 1:11) *

Замечательные числа
"Определить, является ли число палиндромом (без его преобразования в строку)" - там есть составление "обратного" числа...




Я вот посмотрела эту функция, сдела прогу... но у меня как-то там странно... если я ввожу например число 234, то у меня выводится False.., а число наоборот не печатается... а когда ввожу 0, то вводится True... Извините, что неправильно?



Program Pereverni;
function perevertysh(x:longint):boolean;
var prev, T:longint;
begin
prev:=x;
T:=0;
while x<>0 do begin
T:=T*10+(x mod 10);
x:=x div 10;
end;
perevertysh:=(prev=t)
end;
var x:integer;
begin
writeln('Vvedite chislo');
write('-->');
readln(x);
write('Poluchili:',perevertysh(x));
readln
end.


Сообщение отредактировано: Светлана -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Светлана, какой тип результа у функции perevertysh?
действительно, 234 - не перевертыш (234<>432), а ноль - перевертыш.


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


Пионер
**

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

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


Цитата(мисс_граффити @ 18.12.2006 19:02) *

Светлана, какой тип результа у функции perevertysh?
действительно, 234 - не перевертыш (234<>432), а ноль - перевертыш.



а, спасибо! Понятно! Но у меня задача звучит так: Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке (напр., дано число 156, получить 651). Вот, я делала через строку, но мне посоветовали зайти на ссылку.. и вот, я так переделала прогу... Значит она теперь ваще неправильная????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


она правильная, просто ты ее не переделала smile.gif
Program Pereverni;
function perevertysh(x:longint):longint;
var prev, T:longint;
begin
prev:=x;
T:=0;
while x<>0 do begin
T:=T*10+(x mod 10);
x:=x div 10;
end;
perevertysh:=t
end;
var x:integer;
begin
writeln('Vvedite chislo');
write('-->');
readln(x);
write('Poluchili:',perevertysh(x));
readln
end.


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


Пионер
**

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

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


Аааа, поняла!..... Спасибо Вам огромное!!!! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


У меня тут такая проблемка... Мне сказали решать с массивом.... Я вот переделала... Но у меня как-то неправильно считает, не получае6тся перевернутое число.. Помогите пож-та..


Program Pereverni;
function perevertysh(x:integer):integer;
var a:array[1..100] of integer;
c,n,i:integer;
begin
n:=0; i:=i+1;
while x<>0 do begin
c:=x mod 10; a[i]:=c;
x:=x div 10;
n:=n+1; i:=i+1;
end;
c:=0;
for i:=1 to n do
c:=c+a[i]*(n-(i-1));
perevertysh:=c;
end;
var x,c:integer;
begin
writeln('vvedite chislo');
readln(x);
write('Poluchili:',perevertysh(x));
readln
end.

заранее спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


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

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

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


function perevertysh(x:integer):integer;
var a:array[1..100] of integer;
c,n,i:integer;
begin
n:=0; i:=i+1; {а чему у тебя равно i до этой операции? ты, наверное, хотела написать i:=1}
while x<>0 do begin
c:=x mod 10; a[i]:=c;
x:=x div 10;
n:=n+1; i:=i+1;
end;
c:=0;
for i:=1 to n do
c:=c+a[i]*(n-(i-1));{а вот умножать надо не на (n-(i-1), а на 10 в степени}
perevertysh:=c;
end;


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


Пионер
**

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

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


Цитата(мисс_граффити @ 23.12.2006 10:55) *


n:=0; i:=i+1; {а чему у тебя равно i до этой операции? ты, наверное, хотела написать i:=1}

c:=c+a[i]*(n-(i-1));{а вот умножать надо не на (n-(i-1), а на 10 в степени}





я заменила, написала i:=1;

а как написать вот это: 10 в степени (в какой степени?)...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


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

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

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


exp(k*ln(10))
где k-степень.
Самый простой способ, но его противность заключается в том, что возвращает вещественное число, что может дать пусть минимальную, но погрешность. Да и несовместимость типов даст.... Поэтому можешь округлять с использованием любой функции округления, а можешь написать свою функцию возведения 10 в определенную степень.

А степень будет определяться положением в массиве.
Смотри:
165,4=1*10^2+6*10^1+5*10^0+4*10^-1
(^обозначается степень)
вот и прикинь, где в массиве окажется какой разряд.


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


Пионер
**

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

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


Цитата(мисс_граффити @ 18.12.2006 20:54) *

она правильная, просто ты ее не переделала smile.gif
Program Pereverni;
T:=T*10+(x mod 10);
x:=x div 10;




извините, что вот эти 2 строчки означают?


Цитата(мисс_граффити @ 23.12.2006 10:55) *

function perevertysh(x:integer):integer;
var a:array[1..100] of integer;
c,n,i,k:integer;
begin
n:=0; i:=1;
while x<>0 do begin
c:=x mod 10; a[i]:=c;
x:=x div 10;
n:=n+1; i:=i+1;
end;
c:=0;
for i:=1 to n do
c:=c+a[i]*(exp(k*ln(10));{а вот умножать надо не на (n-(i-1), а на 10 в степени}
perevertysh:=c;
end;



вот, у меня высвечивается: error 26 в той строчке, где с:=
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

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


с - целого типа, а ты ей пытаешься присвоить значение вещественного.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


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

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

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


Цитата
Самый простой способ, но его противность заключается в том, что возвращает вещественное число, что может дать пусть минимальную, но погрешность. Да и несовместимость типов даст.... Поэтому можешь округлять с использованием любой функции округления, а можешь написать свою функцию возведения 10 в определенную степень.

Ты бы хоть читала... Я же не зря это набирала.


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


Пионер
**

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

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


Цитата(мисс_граффити @ 26.12.2006 12:22) *

Ты бы хоть читала... Я же не зря это набирала.


конечно читала!!!... ток не поняла, что в прогу-то писать надо.... ааа sad.gif

Цитата(мисс_граффити @ 18.12.2006 20:54) *


   T:=T*10+(x mod 10);
x:=x div 10;




что эти строчки-то означают?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


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

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

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


round(exp(k*ln(10))) 

только твоя программа не знает, что такое k (в смысле, чему оно равно)! тебе надо рассчитывать степень исходя из индекса в массиве.


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


Пионер
**

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

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


Цитата(мисс_граффити @ 26.12.2006 14:40) *

round(exp(k*ln(10))) 

только твоя программа не знает, что такое k (в смысле, чему оно равно)! тебе надо рассчитывать степень исходя из индекса в массиве.


хорошо, поразбираюсь...

ответьте еще пож-та:
что ЭТО СТРОКА означает?


T:=T*10+(x mod 10);
x:=x div 10;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


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

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

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


допустим, у нас число х=351
Т изначально равно 0
T:=T*10+(x mod 10)
или, подставив значения:
T:=0*10+(351 mod 10)
T:=1
Потом x:=x div 10
x:=351 div 10
x:=35
идем на новую итерацию...
Т:=1*10+(35 mod 10)
T:=10+5
T:=15
ну и т.д.


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


Пионер
**

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

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


Цитата(мисс_граффити @ 26.12.2006 17:55) *

допустим, у нас число х=351
Т изначально равно 0
T:=T*10+(x mod 10)
или, подставив значения:
T:=0*10+(351 mod 10)
T:=1
Потом x:=x div 10
x:=351 div 10
x:=35
идем на новую итерацию...
Т:=1*10+(35 mod 10)
T:=10+5
T:=15
ну и т.д.


спасибо!!! Ну тогда в таком виде и сдам прогу!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 4.10.2024 8:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name