Data Entry with struct
31 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Shahrear Khan Faisal
il 24 Set 2020
Risposto: Black Woods
il 17 Dic 2022
I'm stuck with the following data entry assignment. Your suggestions will be highly appreciated.
In a voting center, the voters are required to give their names and ID numbers to the voting staff before going int incoming voters' information. Write a function called voters to record the incoming voters' information. The function should take an unspecified number of inputs, but the first input will be the current database. The rest of the arguments must come order of name, a string or char array, and ID, an integer or integer-valued double. If there is at least one ocurrence of no ID number after a name, or the data types are not what's required, return the original database. The function should return a struct array containing Name (a string) and ID( a double) fields as shown below
>> database = voters([], 'Brandon', 12356)
database =
struct with fields:
Name: "Brandon"
ID: 12356
>> database = voters(database, "Mike", 9876, 'Akos', 112233)
database =
1x3 struct array with fields:
Name
ID
>> database(end)
ans =
struct with fields:
Name: "Akos"
ID: 112233
However, if there is an illegal call, the database should not change:
>> database
database =
1x3 struct array with fields:
Name
ID
>> database = voters(database, 'Student', 99999, "No ID")
database =
1x3 struct array with fields:
Name
ID
Here's the code I tried -
function database = voters(varargin)
database = struct('Name', {}, 'ID', {});
if nargin >= 5 & mod(nargin, 2) ~= 0
for i = 2:2:nargin-1
if ischar(varargin{i}) & isa(varargin{i+1}, 'double') & isempty(varargin{1})
database = struct('Name', varargin{i}, 'ID', varargin{i+1})];
else
database = database;
break;
end
end
else if nargin == 3 & ischar(varargin{2}) & isa(varargin{3}, 'double') & isempty(varargin{1})
database = struct('Name', varargin{2}, 'ID', varargin{3});
else
database = database;
end
end
1 Commento
likith yerram
il 12 Ott 2020
Error in solution: Line: 6 Column: 34
Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.
Risposta accettata
Alberto Zekry
il 14 Ott 2020
function database = voters(di,varargin)
if isempty(di)
database = struct('Name', {}, 'ID', {});
end
if rem(nargin,2)==0
database=di
return
end
si=length(varargin)/2;
for ii = 1:si
jj=2*ii;
if (ischar(varargin{jj-1}) || isstring(varargin{jj-1})) && isa(varargin{jj}, 'double') && (fix(varargin{jj})==(varargin{jj}))
database(ii) = struct('Name', convertCharsToStrings(varargin{(2*ii)-1}), 'ID', double(varargin{2*ii}));
else
database=di
return
end
end
database=[di database]
end
0 Commenti
Più risposte (3)
Ahsan Ali
il 30 Ott 2020
Check this Out (Tested)
function database = voters(di,varargin)
if isempty(di)
database = struct('Name', {}, 'ID', {});
end
if rem(nargin,2)==0
database=di;
return
end
si=length(varargin)/2;
for ii = 1:si
jj=2*ii;
if (ischar(varargin{jj-1}) || isstring(varargin{jj-1})) && isa(varargin{jj}, 'double') && (fix(varargin{jj})==(varargin{jj}))
database(ii) = struct('Name', string(varargin{(2*ii)-1}), 'ID', double(varargin{2*ii}));
else
database=di;
return
end
end
database=[di database];
end
0 Commenti
Abdul Quadir Khan
il 7 Nov 2020
function database = voters(di,varargin)
if isempty(di)
database = struct('Name', {}, 'ID', {});
end
if rem(nargin,2)==0
database=di
return
end
si=length(varargin)/2;
for ii = 1:si
jj=2*ii;
if (ischar(varargin{jj-1}) || isstring(varargin{jj-1})) && isa(varargin{jj}, 'double') && (fix(varargin{jj})==(varargin{jj}))
database(ii) = struct('Name', convertCharsToStrings(varargin{(2*ii)-1}), 'ID', double(varargin{2*ii}));
else
database=di
return
end
end
database=[di database]
end
1 Commento
PADMAKAR
il 23 Mar 2021
I am tryint to use setfield to add fields to a structure. It does not seem to work. The problem is the same as above. Here is my code
function [dbase_out]=voters(dbase_in,varargin)
if isempty(dbase_in)
dbase_out = struct('Name', {}, 'ID', {});
return
end
i
f isempty(varargin)
dbase_out=struct('Name',{},'ID',{});
dbase_out=dbase_in;
return
elseif ~rem(length(varargin),2)==0
dbase_out=struct('Name',{},'ID',{});
dbase_out=dbase_in;
return
end
%----------------------------------------------------------------------------------------------------------------------------------------------
for i = 1:2:length(varargin)/2
if ischar(varargin{i}) || isstring(varargin{i})
else
dbase_out = dbase_in;
return;
end
end
% create a empty structure because the number of fields required also includes empty fields from database
dbase_out = struct('Name', {}, 'ID', {});
for ii=1:length(varargin)/2
n=2*ii ;
if isa(varargin{n}, 'double') && (fix(varargin{n})==(varargin{n}))
dname{ii}= string(varargin{n-1});
dID{ii}= double(varargin{n});
end
end
%dbase_out=struct('Name',dname,'ID',dID);
for i=2: length(varargin)/2
dbase_out=setfield(dbase_out,'Name',dname(i));
dbase_out=setfield(dbase_out,'ID',dID(i));
end
Black Woods
il 17 Dic 2022
function database=voters(varargin)
if isempty(varargin{1})
jj=ones(1,1);
else
jj=length(varargin{1})+1;database=varargin{1};
end
if isequal(mod(length(varargin)-1,2),0)
for ii=2:2:length(varargin)
if (isa(varargin{ii},'char')||isa(varargin{ii},'string'))&&((isa(varargin{ii+1},'double')||isa(varargin{ii+1},'int32'))&&isequal(fix(varargin{ii+1}),varargin{ii+1}))
database(jj).Name=string(varargin{ii});database(jj).ID=varargin{ii+1};jj=jj+1;
else
database=varargin{1};
return
end
end
else
database=varargin{1};
return
end
0 Commenti
Vedere anche
Categorie
Scopri di più su JSON Format in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!