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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 19:20   #1
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
Восклицание Cant Find mistake

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

PHP код:
Program x;
var 
sbf:string;
   
perper2ijsumsum2:integer;{10to2}
   
summa1summa2:real;
   
nLongInt;
begin
writeln
('числа берутся положительные!');
writeln('если хотите перевести число из десятичной в двоичную, то введите 1');{выбор действия}
writeln('если хотите перевести число из двоичной в десятичную то введите 2');
writeln('если хотите сложить 2 числа в двоичной системе счисления, то введите 3');
writeln('если хотите умножить 2 числа в двоичной системе счисления, то введите 4');
readln(per);
per2:=1;

if 
per=3 then begin {сложение чисел}
writeln('введите первое и второе число');
readln(summa1summa2);
n:=summa1+summa2;
per:=1;
per2:=2
end;

if 
per=4 then begin {умножение чисел}
writeln('введите первное и вротое число');
readln(summa1summa2);
s:=summa1*summa2;
per:=2;
per2:=2;
end;

if 
per=1 then begin {перевод из десятичной в двоичную}
write('введите десятичное число =');
  if 
per2=1 then readLn(n) else begin{считывание десятичного числа}
  
n:=abs(n);{нахождение модуля числа для правильности рассчетов}
  while 
n>do
    
begin
      str
(n mod 2f); {вычисление двоичного числа путем деления на 2}
      
n:= n div 2;
      
b:= f+b;
    
end;
  
str(n mod 2,s);
  
b:= f+b;
  
writeLn('Двоичное число = ',b);
end;
end;

if 
per=2 then begin {из двоичной в десятичную}
clrscr;
repeat
j
:=0;
writeln('Введите число в двоичной системе:');
if 
per2=1 then Readln(s) else begin
for i:=1 to length(s) do
if 
not (s[iin ['0','1']) then {если есть что-то кроме 0 и 1}
 
begin
  j
:=1;
  
writeln('Число введено неверно. Повторите ввод.');
  break;
 
end;
until j=0;
sum:=0;{начинаем составлять десятичное число}
for 
i:=length(s)-1 downto 1 do{идем спредпоследнего знака назад}
 
begin
  
if s[i]='1' then{если 1}
   
begin
    sum2
:=1;{составляем очередную степень числа 2}
    for 
j:=1 to length(s)-do sum2:=sum2*2;{возводим 2 в степень ее позизии с конца-1}
   
end
  
else sum2:=0;{если ноль ничего}
  
sum:=sum+sum2;{прибавляем очередное слагаемое}
 
end;
if 
s[length(s)]='1' then inc(sum);{если последнее в исходной строке 1увеличиваем число на 1}
writeln('Число в десятичной системе = ',sum);
end;
end;
end
выводится ошибка №26 Type Mismatch на строке n:=summa1+summa2;

обозначал их как integer- то же самое..
Укажите, пожалуйста, где ошибка? дело горит...
dikabraz вне форума Ответить с цитированием
Старый 19.10.2010, 19:23   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
summa1, summa2:integer;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.10.2010, 19:25   #3
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
По умолчанию

integer поставил, теперь тоже такая же ошибка 26 но уже на n:=summa1*summa2;
dikabraz вне форума Ответить с цитированием
Старый 19.10.2010, 19:27   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Проще говоря, вы пытаетесь целочисленному типу присвоить сумму вещественных чисел.
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.10.2010, 19:29   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Делайте все три переменные longint или все три integer
a теперь вы пытаетесь строке присвоить произведение двух чисел

Последний раз редактировалось _-Re@l-_; 19.10.2010 в 19:32.
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.10.2010, 19:30   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
n:=Trunc(summa1*summa2);
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.10.2010, 19:33   #7
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Делайте все три переменные longint или все три integer
делал n, summa1, summa2:integer;
делал longint
все равно такая же фигня 26 ошибка на summa1*summa2
dikabraz вне форума Ответить с цитированием
Старый 19.10.2010, 19:34   #8
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
n:=Trunc(summa1*summa2);
так же....
dikabraz вне форума Ответить с цитированием
Старый 19.10.2010, 19:48   #9
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
По умолчанию

оказывается, я клинический идиот...

PHP код:
if per=3 then begin {сложение чисел
writeln('введите первое и второе число'); 
readln(summa1summa2); 
[
COLOR="Red"]n:[/COLOR]=summa1+summa2
per:=1
per2:=2;  
end

if 
per=4 then begin {умножение чисел
writeln('введите первное и вротое число'); 
readln(summa1summa2); 
[
COLOR="#ff0000"]s:[/COLOR]=summa1*summa2
per:=2
per2:=2
end
хехехе... спасибо вам за помощь=)
dikabraz вне форума Ответить с цитированием
Старый 19.10.2010, 20:00   #10
dikabraz
 
Регистрация: 15.10.2010
Сообщений: 7
По умолчанию

PHP код:
 begin
  j
:=1;
  
writeln('Число введено неверно. Повторите ввод.');
  break;
 
end;
until j=0;
sum:=0;{начинаем составлять десятичное число}
for 
i:=length(s)-1 downto 1 do{идем спредпоследнего знака назад}
 
begin
  
if s[i]='1' then{если 1}
   
begin 
на строке until j=0;
выходит 113 ошибка...
народ, помогите пж-та... все, что знал, перепробовал
dikabraz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ecxel через Deiphi (Find) Dus-F Общие вопросы Delphi 2 26.03.2010 14:16
метод find kate158 Общие вопросы Delphi 4 15.12.2009 16:09
Find WebBrowser Edward Работа с сетью в Delphi 2 04.09.2009 20:03
Макрос, расширяющий функцию Find neugadal Microsoft Office Word 5 29.09.2008 08:32