Логотип Автор24реферат
Задать вопрос
%
уникальность
не проверялась
Решение задач на тему:

Нужно на основе имеющихся список составить новые следующего вида

уникальность
не проверялась
Аа
8171 символов
Категория
Программирование
Решение задач
Нужно на основе имеющихся список составить новые следующего вида .pdf

Зарегистрируйся в 2 клика в Кампус и получи неограниченный доступ к материалам с подпиской Кампус+ 🔥

Условие

1. Нужно на основе имеющихся список составить новые следующего вида: ФИО (причем вида Иванов И.И., те имя и отчество сокращены), дата рождения, номер округа плюс название округа (одна колонка), город, место работы, партийность, т.е. всего 6 колонок, две из которых модифицированы, записи должны быть упорядочены по алфавиту относительно фамилий. У столбиков должны появиться новые заголовочки. Сформированные списки нужно сохранить в файл под завиванием ФИО_студента_новый список 2. Нужно посчитать статистику по возрастам. Найти самого старого, самого молодого, найти средний возраст, построить гистограмму распределения возрастов. Примерно прикинуть, сколько человек живы (средний возраст жизни считаем равным 70) 3. Анализируем партийность. Нужно сформировать вложенный ячеистый массив по признаку партии, те первый столбик ячеистого массива это название партии, второй столбик это вложенный список из фИО, которые соотностяся с этой партией, третья колонка это средний возраст участников партии, четвертая колонка это количество человек-участников партии. Отчетность: пишем подробные отчеты, к нему прикладываем код, файл из 1 части, по 2 и 3 части принскины гистограммы и воркспейса (чтобы было видно что это вложенный ячеистый массив) ПОДСКАЗКИ xlsread, xlswrite — считывание и запись экселя (никаких fopen тут не надо) sortrows — сортировка элементов массива Как превратить "Иванов Иван Иванович" в "Иванов И.И." было в лекциях (используем функцию strsplit) Если содержимое ячейки не меняем при записи в новый массив, то достатчоно сделать вот так b(:,3)=a1(:,3) (никакие циклы тут не нужны!) c={'Фамилия И.О.','район и № округа','партийность','должность','год рождения'} — создает строку с названиеми колонок ячеистого массива cell2mat — вытащить число из ячеистого массива найти кто самый старый и молой — см лекции гистогрмма функция hist количество выживших — используем операции сравнения, решается в одну строку! функция unique — количество уникальных элементов в массиве (для подсчета партий) strcmp — то же самое что и ==, только для строк e{i,1}=a1(strcmp(a1(:,6),e0{i})) — запишет в первую колонку е только те элементы массива a1, которые совпадают с e0 (это и есть вложенный ячеистый массив)

Нужно полное решение этой работы?

Решение

Потяни, чтобы посмотреть
1. Считываем данные из файла Excel в ячеистый массив a:
[~,~,a]=xlsread('Швецов Никита Алексеевич');
Подсчитываем число записей вместе с заголовком:
n=length(a);
Новый заголовок в 6 колонок:
c={'Фамилия И.О.','Год рождения','№ округа и район','Город','Место работы','Партийность'};
Теперь для каждой фамилии:
Разбиваем колонку с полной ФИО на 3 ячейки 'Ф' 'И' 'О':
temp=strsplit(a{i,2});
В первую колонку нового ячеистого массива записываем с помощью сложения строк strcat фамилию, пробел, первую букву имени, точку, первую букву фамилии, точку. Однако некоторые участники не имеют отчества, поэтому необходимо проверить длину ячеистого массива temp, если она равна 3, то
c(i,1)=strcat(temp{1,1}, {' '}, temp{1,2}(1), '.', temp{1,3}(1), '.' );
Иначе отчества не будет и c(i,1)=strcat(temp{1,1}, {' '}, temp{1,2}(1), '.');
В третью колонку нового ячеистого массива записываем номер округа + район:
c(i,3)=strcat(num2str(a{i,5}), {' '}, a{i,6});
num2str – преобразования числа в строку.
Колонки без изменения просто переносим:
c(:,2)=a(:,3); c(:,4)=a(:,7); c(:,5)=a(:,8); c(:,6)=a(:,4);
Сортируем по первой колонке (кроме заголовка)
c(2:n,:)=sortrows(c(2:n,:), 1);
Сохраняем на диск:
xlswrite('Швецов Никита Алексеевич_новый список',c);
Код MATLAB:
clear all
close all
[~,~,a]=xlsread('Швецов Никита Алексеевич');
n=length(a);%число записей + заголовок
c={'Фамилия И.О.','Год рождения','№ округа и район','Город','Место работы','Партийность'};

for i=2:n
%колонку с фамилией модифицируем
temp=strsplit(a{i,2});
if length(temp)==3
c(i,1)=strcat(temp{1,1}, {' '}, temp{1,2}(1), '.', temp{1,3}(1), '.' );
else
c(i,1)=strcat(temp{1,1}, {' '}, temp{1,2}(1), '.');
end
%колонку с округом и районом объединяем
c(i,3)=strcat(num2str(a{i,5}), {' '}, a{i,6});
end

c(:,2)=a(:,3); c(:,4)=a(:,7); c(:,5)=a(:,8); c(:,6)=a(:,4);
%сортируем по алфавиту фамилии
c(2:n,:)=sortrows(c(2:n,:), 1);

%сохраняем на диск
xlswrite('Швецов Никита Алексеевич_новый список',c);
2 .
Вычисляем текущий возраст участников, вычитая из сегодняшнего года year(date) их год рождения
V=year(date)-cell2mat(c(2:n,2));
Находим минимальный и максимальный возраст для и номера этих людей в списке:
[m1,k1]=min(V);[m2,k2]=max(V);
Средний возраст считаем с помощью mean:
Vm=mean(V,'omitnan');
Параметр 'omitnan' игнорирует пустые данные, которые здесь имеются (у одного человека год рождения не указан)
Число выживших определяем по сумме логических значений при поэлементном сравнении сравнение с 70 годами:
k=sum(V<=70);
Выводим на экран все значения:
Гистограмма по возрастам:
Код MATLAB:
V=year(date)-cell2mat(c(2:n,2));
[m1,k1]=min(V);[m2,k2]=max(V);

fprintf('Самый старый - %s, %d лет\n', c{k2+1,1}, m2);
fprintf('Самый молодой - %s, %d лет\n', c{k1+1,1}, m1);
Vm=mean(V,'omitnan');
fprintf('Средний возраст: %f лет\n', Vm);

%гистограмма
hist(V,8);
title('Распределение по возрастам')
xlabel('Возраст')
ylabel('Частота')
%число выживших
k=sum(V<=70);
fprintf('Среднее число выживших: %d\n', k);
Массив из возрастов:
3
50% задачи недоступно для прочтения
Переходи в Кампус, регистрируйся и получай полное решение
Получить задачу
Больше решений задач по программированию:
Все Решенные задачи по программированию
Закажи решение задач

Наш проект является банком работ по всем школьным и студенческим предметам. Если вы не хотите тратить время на написание работ по ненужным предметам или ищете шаблон для своей работы — он есть у нас.