Домашнее задание Matlab — массивы ячеек и диалоги окон

Программа 4: Вы будете использовать графический интерфейс для сбора входных данных и отображения выходных данных в этой программе. НЕ ИСПОЛЬЗУЙТЕ input() или fprintf().

1 Используя listdlg(), вы попросите пользователя выбрать, сколько учеников зачислено в класс. Для простоты список будет включать только числа от 1 до 5. Убедитесь, что пользователю разрешен только один выбор (см. рис. 1). Также рассмотрим случай, когда пользователь нажимает кнопку отмены в любом из двух полей. (Вам нужно отобразить msgbox() с надписью «Пожалуйста, сделайте выбор», после чего снова появится listdlg()).

2 Затем вы будете отображать inputdlg() (см. рис. 2) столько раз, сколько студентов выбрано в listdlg() (т.е. если пользователь выбрал четырех зачисленных студентов, то inputdlg() появится четыре раза для сбора информации для каждого студента) . Здесь есть два важных ограничения: во-первых, вам нужно использовать один inputdlg() с циклом for; во-вторых, вам нужно сохранить всю информацию, введенную в МАССИВ ЯЧЕЙ, который называется Gradebook.

3 Подсчитайте СРЕДНЮЮ оценку для каждого учащегося и с помощью msgbox() отобразите имена учащихся с наивысшей средней оценкой и ее/его среднюю оценку. (См. пример на рис. 3ow). Будьте осторожны, чтобы шаг 4 не начался, пока пользователь сначала не нажмет «ОК» на этом msgbox().

4 Затем с помощью questdlg() (см. рис. 4) вы спросите пользователя, хотят ли они снова использовать программу или нет. Если они сказали да, то программа запустится снова, если они сказали нет, то программа завершится, если нажали на отмену, то снова появится msgbox() из предыдущего шага.

Как я могу рассчитать среднее значение, а затем отобразить его с именем ученика?

Заранее спасибо! :)

Вот что я получил:

clc
clear
ns = {'One','Two','Three','Four','Five'};
[selection ok] = listdlg('liststring',ns,'selectionmode','single');
while ok == 0
    msgbox('Please make a selection')
    [selection ok] = listdlg('liststring',ns,'selectionmode','single');
end
gradebook = {1,selection};
avematrix = [2,selection];
for d = 1:selection
  sinfo = {'Enter student name','Numerical grade for 1st exam (out of 100):',...
  'Numerical grade for 2nd exam (out of 100):','Numerical grade for 3rd exam (out of 100):'};
  info = inputdlg(sinfo);
  gradebook(1,d) = {info};
  name = info {1}
  a=str2double(info{2});
  b=str2double(info{3});
  c=str2double(info{4});
  average = ((a+b+c)/3);
  avematrix(2,d) = average;
  g = mean(info)
end

person user1279248    schedule 20.03.2012    source источник


Ответы (1)


последняя строка должна быть g=mean(cell2mat({info{2:end}}))

person Rasman    schedule 21.03.2012
comment
хорошо, это даст среднее значение, но как я могу связать его с именем, когда мне нужно отобразить максимальное среднее значение с именем студента в msgbox.? - person user1279248; 21.03.2012