Program BinaryDenaryAdder; {$mode objfpc}{$H+} Uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, SysUtils { add your units here }; Function AddBinary(BinaryNum1, BinaryNum2 : String) : String; Var NumberOfDigits, i, Diff : Integer; Carry : Char; BinaryResult : String; Begin If Not (Length(BinaryNum1) = Length(BinaryNum2)) Then If Length(BinaryNum1) > Length(BinaryNum2) Then Begin NumberOfDigits := Length(BinaryNum1); Diff := NumberOfDigits - Length(BinaryNum2); For i := 1 To Diff Do BinaryNum2 := '0' + BinaryNum2; End Else Begin NumberOfDigits := Length(BinaryNum2); Diff := NumberOfDigits - Length(BinaryNum1); For i := 1 To Diff Do BinaryNum1 := '0' + BinaryNum1; End Else NumberOfDigits := Length(BinaryNum1); Writeln('Binary number input 1: ', BinaryNum1); Writeln('Binary number input 2: ', BinaryNum2); BinaryResult := ''; For i := 1 To NumberOfDigits Do BinaryResult := BinaryResult + ' '; Carry := '0'; For i := NumberOfDigits DownTo 1 Do If Carry = '0' Then If (BinaryNum1[i] = '1') And (BinaryNum2[i] = '1') Then Begin Carry := '1'; BinaryResult[i] := '0' End Else If (BinaryNum1[i] = '0') And (BinaryNum2[i] = '0') Then BinaryResult[i] := '0' Else BinaryResult[i] := '1' Else If (BinaryNum1[i] = '0') And (BinaryNum2[i] = '0') Then Begin BinaryResult[i] := '1'; Carry := '0'; End Else If (BinaryNum1[i] = '1') And (BinaryNum2[i] = '1') Then BinaryResult[i] := '1' Else BinaryResult[i] := '0'; If Carry = '1' Then BinaryResult := '1' + BinaryResult; AddBinary := BinaryResult; End; Function ConvertDenaryToBinary(DenaryNum : Integer) : String; Var TempResult, BinaryResult : String; Count : Integer; Begin TempResult := ''; Repeat TempResult := TempResult + IntToStr(DenaryNum Mod 2); DenaryNum := DenaryNum Div 2; Until DenaryNum = 0; BinaryResult := ''; For Count := Length(TempResult) DownTo 1 Do BinaryResult := BinaryResult + TempResult[Count]; ConvertDenaryToBinary := BinaryResult; End; Var NumIn1, NumIn2 : Integer; BinaryIn1, BinaryIn2 : String; Result : String; Begin Writeln('Combined Denary To Binary Convertor and Binary Adder'); Writeln; Write('Input denary number 1: '); Readln(NumIn1); Write('Input denary number 2: '); Readln(NumIn2); BinaryIn1 := ConvertDenaryToBinary(NumIn1); BinaryIn2 := ConvertDenaryToBinary(NumIn2); Result := AddBinary(BinaryIn1, BinaryIn2); Writeln('Result in Binary: ', Result); Readln; End.