MATLAB MATLAB project to decrypt messages

  • Thread starter Thread starter G'mo
  • Start date Start date
  • Tags Tags
    Matlab Project
AI Thread Summary
The discussion centers on a MATLAB project aimed at decrypting messages consisting of uppercase letters and spaces. The primary issue is that the program incorrectly outputs '7' instead of a space. The user’s code converts spaces (ASCII 32) into '7' during decryption due to the logic in the conditional statements. The solution proposed involves restructuring the conditional statements to ensure that spaces are not altered. Specifically, an outermost IF condition is suggested to check for spaces before applying any transformations to the characters. This adjustment prevents spaces from being converted into other characters, resolving the output issue. Additionally, a workaround is mentioned, where '7' can be replaced with a space after processing, but the focus remains on correcting the logic to avoid the problem altogether.
G'mo
Messages
3
Reaction score
0
Hi everyone. I have a MATLAB project to decrypt messages using only uppercase characters and spaces(i.e no punctuation). The problem is that my program is working but does not print spaces, instead of a space it prints 7. If anyone can help, I'll be very greatful.Here is my program:

a1 = input('Please enter a sentence: ','s');
p = upper(a1); % Change the text to uppercase
double(p); % String to ASCII codes

for i = 1:numel(p) % Iterate as long as there are characters
% in the string
if (p(i) ~= 32) & (p(i) > 67)
p(i) = p(i) - 3;
elseif (p(i) <= 67)
p(i) = p(i) + 23;
else
* (p(i) == 32)
end
end
disp(p)

* This part seems to be useless.
If the user inputs: khoor pb iulhqg
output: HELLO7MY7FRIEND
 
Physics news on Phys.org
Just replace any occurence of '7' in p with ' ' before disp(p):

for i=1:numel(p)
if(p(i)=='7')
p(i)=' ';
end
 
Your problem appears to be this part:

Code:
elseif (p(i) <= 67)
  p(i) = p(i) + 23;

...it converts 32 (' ') into 32 + 23 = 55 ('7').

If you don't want to convert spaces into anything then use an outermost IF, something like this:

Code:
if (p(i) ~= 32)
  if (p(i) > 67)
    p(i) = p(i) - 3;
  else
    p(i) = p(i) + 23;
  end
end

(I'm unsure of the syntax but you should get the idea.)
 
Back
Top