------------------ part_a ex7 fplot

t = 1790:2000;
div= 1 + exp(-0.0313*(t -1913.25));
P = 197273000./div;

plot(t,P)
xlabel('Ano'), ylabel('População')
P2020 = 197273000/ (1 + exp(-0.0313*(2020 -1913.25)))


------------------- part_a ex9 indices

Z = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5]
A = Z(:,2:2:end)
B = Z(1:2:end,:)
C = Z'
D = 1./Z %[rats(d)]
E = sqrt(Z)


------------------- part_a ex10 input

clc; %limpa a linha de comandos
clear all; %apaga todas as variáveis do espaço de trabalho
close all; %fecha todas as figuras

a3 = input('Introduzao coeficientede x^3: ');
a2 = input('Introduzao coeficientede x^2: ');
a1 = input('Introduzao coeficientede x^1: ');
a0 = input('Introduzao coeficientede x^0: ');
pol= [a3 a2 a1 a0];

raizes= roots(pol);
disp('As raizes do polinomio sao: ');
disp(raizes);


------------------- part_b ex1 fn sigmoide


function y = sigmoide(x,K)
%
% A função SIGMOIDE calcula a relação
% entrada-saída da função y = 1 / (1+ e^(-K*x)).
%
% Chamada: y = sigmoide(x,K), em que K é um escalar
% e x pode ser um escalar ou um array uni-dimensional

[linhas_K, colunas_K] = size(K);
[linhas_x, colunas_x] = size(x);
if (linhas_x> 1 && colunas_x> 1)
   error('x tem que se um array uni-dimensional.')
elseif ~(linhas_K== 1 && colunas_K== 1)
   error('K tem que ser um escalar.')
end

y =1./(1 + exp(-K*x));


-----
%Este script testa a função SIGMOIDE
clc;
clear all;
close all;
disp('Este script testa a função SIGMOIDE');

%pede o valor de x e testa o valor
x_incorrecto= true;
while (x_incorrecto)
   entrada_x= ...
      input('Introduza um escalar ou array uni-dimens. x [e.g.: [-5:0.01:5]]: ');
   [linhas_entrada_x, colunas_entrada_x] = size(entrada_x);
   x_incorrecto= (linhas_entrada_x> 1 && colunas_entrada_x> 1);
end

%pede 3 valores de K e testa os seus valores
K_incorrecto= true;
while(K_incorrecto)
   entrada_K_1 = input('Introduza um escalar K_1 [e.g.: 1]: ');
   entrada_K_2 = input('Introduza um escalar K_2 [e.g.: 10]: ');
   entrada_K_3 = input('Introduza um escalar K_3 [e.g.: 100]: ');
   entrada_K= [entrada_K_1, entrada_K_2, entrada_K_3];
   [linhas_entrada_K, colunas_entrada_K] = size(entrada_K);
   K_incorrecto= (linhas_entrada_K~=1 ||colunas_entrada_K~= 3);
end

figure(100), hold on;
for j=1:3,
   subplot(3,1,j),
   plot(entrada_x, sigmoide(entrada_x, entrada_K(j)));
   title(['K_', int2str(j), ' = ', int2str(entrada_K(j))]), grid on;
end


------------------- part_c ex1 ordena strings

function [celOrd] = ordenaStrings(cel)
%Comentários ... help!!

%Testes à estrutura de entrada
if class(cel)~='cell',
   error('O argumento não é um cell array');
end;
[linhas_cel, colunas_cel] = size(cel);
if (linhas_cel> 1 && colunas_cel> 1)
   error('O cellarray deve ser um vector!');
end
if (linhas_cel== 0 || colunas_cel== 0)
   error('O cellarray deve ser não-vazio!');
end

for k=1:length(cel)
   if(strcmp(class(cel{k}), 'char')~=true)
      error('Todos os elementos do cellarray devem ser um array de chars!');
   end
end

%Ordenação
[celOrd_aux, indices] = sort(lower(cel));
for k=1:length(cel)
   celOrd{k}=cel{indices(k)};
end


-----
% script_ex_1.m
% Testa ordenaStrings()
clc;

% Introduza o número de strings a ordenar
nstr= input('Introduza o número de strings a ordenar: ');

% Pré-alocação de células
celula= cell(1,nstr); %opcional
for k = 1:nstr
   string= ['Introduza a string nº' int2str(k) ': '];
   celula{k}= input(string,'s');
end

% Ordena string
stringsOrdenadas= ordenaStrings(celula);

% Apresenta os resultados
fprintf('\nStringsordenadas:\n');
for k = 1:nstr
   fprintf('%s\n', stringsOrdenadas{k});
end



------------------- part_c ex4 procura CDs


function celula= procuraCDs(coleccaoCDs, anoAprocurar)
% comentários ...
celula= {};
indice= 1;
for k = 1:length(coleccaoCDs)
   umCD= coleccaoCDs{k};
   if umCD.ano>= anoAprocurar
      celula{indice} = umCD.titulo;
      indice= indice+ 1;
   end
end


-----
% script_ex_4.m
% Testa procuraCDs()

clear all;
clc;
close all;

% Carrega o cellarray composto por estruturas
load OsMeusCDs.mat

% Pede ano e faz a procura
var_ano= input('Introduzao ano a partir do qual quer os resultados: ');
res= procuraCDs(OsMeusCDs, var_ano);

% Apresenta o resultado
disp(['Titulo dos CDs gravados desde o ano ' int2str(var_ano) ': ']);
disp(res);