Make a loop to calculate molecular weight

2 Ansichten (letzte 30 Tage)
Mike
Mike am 15 Nov. 2013
Bearbeitet: Walter Roberson am 9 Okt. 2016
"Use a while loop to ask the user to enter the elemental symbols of the elements in the compound and store these in a padded character array. The user should be asked if there are any more elements to be added and the loop should continue as long as the user enters an upper or lower case y.
Use a second loop that will prompt the user to enter the atomic mass and number of atoms in the compound for each element. These should be stored in separate arrays."
Please help I can't get it to word.
  2 Kommentare
dpb
dpb am 15 Nov. 2013
Well, haven't even seen your start at what doesn't work...show that and a specific question may elicit hints. Full solutions are rarely, if ever, forthcoming.
Mike
Mike am 17 Nov. 2013
Bearbeitet: Walter Roberson am 17 Nov. 2013
disp('Enter atomic symbols in single quotesEnter atomic symbols in single quotes.')
disp('When the symbol is a single letter, precede the letter with a space.')
element=input('Enter the atomic symbol: ','s')
more=input('Are there more elements? 1 for yes 2 for no ','s')
while (1)
if more==1
element=input('Enter the atomic symbol: ')
more=input('Are there more elements? y/n ')
end
end
best i can do so far.. can't figure out how to get the loop to continue when user writes y or n... its giving me error saying y is not a variable

Melden Sie sich an, um zu kommentieren.

Antworten (3)

Walter Roberson
Walter Roberson am 17 Nov. 2013
more = input('Are there more elements? y/n','s');
while strcmpi(more, 'y')
element{end+1} = input('Enter the atomic symbol: ', 's);
more = input('Are there more elements? y/n','s');
end
  5 Kommentare
Mike
Mike am 19 Nov. 2013
Bearbeitet: Walter Roberson am 20 Nov. 2013
yes I learned cell arrays... I revised my code a little bit, I got it to work, just a part of my problem that I didn't post on here is to: • Create a table containing the elemental symbols, the number of the those elements in the compound and the wt% of that element in compound (these should be in columns)
And I'm getting an error msg saying :
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in proj5_problem2 (line 26)
table=[done, a,b,c]
Anytime I input 3 or more elements. It stops asking for molecular weight after the second element and says that error message... Please help, I cannot figure out whats wrong. Here is my code:
more='y';
n=1;
disp('Enter atomic symbols in single quotesEnter atomic symbols in single quotes.')
disp('When the symbol is a single letter, precede the letter with a space.')
while more=='y'
element=input('Enter the atomic symbol: ','s');
element1=char(element);
theelement(n)={element1};
more=input('Are there more elements? y/n ','s');
n=n+1;
end
for x=1:length(theelement{n-1})
disp(['For the element:' theelement(x)])
weight(x)=input('Please enter the weight: ');
atoms(x)=input('Enter the number of these atoms in the compound: ');
end
totalweight=sum(weight.*atoms);
nweight=weight.*atoms;
fprintf('The total weight is %f \n',totalweight)
weightpercent=(nweight./totalweight)*100
done=char(theelement)
a=num2str(nweight')
b=num2str(atoms')
c=num2str(weightpercent')
table=[done, a,b,c]
disp('symbol weight number wt%')
disp(num2str(table))
Marc
Marc am 19 Nov. 2013
I have to say that this question becomes redundant when you look at molmass() in the file exchange. The logic used in that function DOES what you are asking the user to input....
So if you want the molecular weight for C6H6 or Pt(NH3)4Cl2.... It figures out the atoms and the amounts, along with "stuff" in parenthesis...
Thus the weight percent becomes trivial...
%C in benzene = 100*6*MolMass('C')/MolMass('C6H6)

Melden Sie sich an, um zu kommentieren.


Marc
Marc am 19 Nov. 2013
I really hate doing others homework...
But... This works really well and shows one how to use recursive programming.
Next time try google...

Ngoc Tran
Ngoc Tran am 8 Okt. 2016
I just ran into this today and this is the code that I have. I don't use a loop.
Create a container map (similar to Python's dictionary):
key = {'C','H','O'};
value = [12,1,16];
atom = containers.Map(key,value);
molecule = {'C','H','H','H','H'} %CH4
MW = sum(cellfun(@(x) atom(x), molecule))
This will go through every element in the "molecule" list, get the atom mass. You will have an array of atom mass, in this case [12 1 1 1 1], and then sum them up.
To get a more extensive key/value pair you can find .csv files online. I'm just giving an example.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by