Buscar

programacao estruturada I

Prévia do material em texto

13
Anhanguera Educacional
Unidade Santo André
Curso de Graduação em Sistemas de Informação
Matheus Carvalho
Ra:7087573663
Trabalho de programa de recuperação de aprendizagem
Programação estruturada I
Santo André
 2017
Matheus Carvalho
Ra:70875663
Trabalho de programa de recuperação de aprendizagem
Programação estruturada I
Trabalho de recuperação de aprendizagem . 
Orientador: Cleonice reis 
Santo André
2017
ERIC GRAVES CAMOLLEZ 7244587081
AGRADECIMENTOS
Agradeço a todos que me apoiaram durante toda a minha vida e também aos meus pais que me incentivaram e me apoiaram para que eu chegasse até aqui.
Agradeço também a Deus por ter me ajudado em todos os momentos para passar pelas dificuldades e desafios enfrentados.
Aos amigos que colaboraram de todas as formas para a realização das etapas do trabalho e também aos orientadores que nos direcionou da melhor forma possível.
RESUMO
Este trabalho inicialmente abordará conceitos técnicos de programação estruturada , abordara o conceito de programação estruturada , codificação em linguagem natural , codificação em fluxograma , funções em programação estruturadas .
	
ABSTRACT
This work initially will address technical concepts considered fundamental about technology, theoretical and historical contexts intended to illustrate in figures formats, planned environment in its origins, and finally address the issues related to applications and key features of a business tool.
Data Warehouse is a database tool applied in large organizations and have a fundamental basis for the integration of data provide support for the extraction of reports and information related to decision-making, whether operational, and especially tactical or strategic, which in turn have a high degree of importance, the main system that integrates and controls the data is called Business Intelligence.
For the initial data can be generated and delivered to the customer, there is an OLAP tool called (Online Analytical Processing), which in turn has the function to make the collection, analysis, organization and sharing of all data relevant to the organization. This query is performed by the Data Warehouse data source.
Keywords: Data Warehouse; Pentaho; Business Intelligence (BI); Online Analytical Processing (OLAP).
 
Sumário
AGRADECIMENTOS	2
RESUMO	3
ABSTRACT	4
1-	Conceito de programação estruturada	6
2-	Processamento de linguagen natural	6
2.1 - Historia	6
2.2- Aprendizagem de maquina	8
3-	Codificação Fluxograma	9
4-	Funções em programação estruturada	9
REFERÊNCIAS	13
 
1- Conceito de programação estruturada
Programação estruturada é um paradigma de programação, forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão ou seleção e iteração (esta última também é chamada de repetição), desenvolvida por Michael A. Jackson no livro "Principles of Program Design" de 1975.
Emergiu no final dos anos 1950 com as linguagens de programação ALGOL 58 e ALGOL 60.
Tendo, na prática, sido transformada na programação modular, a programação estruturada orienta os programadores para a criação de estruturas simples nos programas, usando as sub-rotinas e as funções. Foi a forma dominante na criação de software anterior à programação orientada por objetos.
Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é muito influente, uma vez que grande parte das pessoas ainda aprendem programação através dela. Para a resolução de problemas relativamente mais simples e diretos, a programação estruturada é muito eficiente. Além disso, por exigir formas de pensar relativamente complexas, a programação orientada a objetos até hoje ainda não é bem compreendida ou usada pela maioria.
Há de acrescentar também que inúmeras linguagens ainda extremamente relevantes nos dias de hoje, como Cobol, PHP, Perl e Go ainda utilizam o paradigma estruturado (muito embora possuam suporte para a orientação a objeto).
2- Processamento de linguagen natural
Processamento de linguagem natural (PLN) é uma subárea da ciência da computação, inteligência artificial e da linguística que estuda os problemas da geração e compreensão automática de línguas humanas naturais. Sistemas de geração de linguagem natural convertem informação de bancos de dados de computadores em linguagem compreensível ao ser humano e sistemas de compreensão de linguagem natural convertem ocorrências de linguagem humana em representações mais formais, mais facilmente manipuláveis por programas de computador. Alguns desafios do PLN são compreensão de linguagem natural, fazer com que computadores extraiam sentido de linguagem humana ou natural e geração de linguagem natural.
2.1 - Historia
A história do PLN começou na década de 1950, quando Alan Turing publicou o artigo "Computing Machinery and Intelligence", que propunha o que agora é chamado de teste de Turing como critério de inteligência.
Em 1954, a experiência de Georgetown envolveu a tradução automática de mais de sessenta frases russas para o inglês. Os autores alegaram que dentro de três ou cinco anos a tradução automática se trataria de um problema resolvido. No entanto, os avanços reais foram muito mais lentos do que o previsto e, após o relatório ALPAC em 1966, que constatou que a pesquisa de dez anos não conseguiu satisfazer as expectativas, o financiamento para este estudo em tradução automática foi reduzido drasticamente. Poucas pesquisas em tradução automática foram conduzidas até o final dos anos 80, quando os primeiros sistemas estatísticos de tradução foram desenvolvidos.
Alguns sistemas de PLN bem sucedidos desenvolvidos nos anos 60 foram SHRDLU, um sistema de linguagem natural que trabalhava em "blocks worlds" com vocabulário restrito e ELIZA, uma simulação de um psicoterapeuta escrita por Joseph Weizenbaum entre 1964 e 1966. Usando pouca informação sobre o pensamento ou a emoção humana, ELIZA criava, em alguns casos, interações surpreendentemente humanas. Quando o "paciente" excedia a base de conhecimento do programa, ELIZA fornecia uma resposta genérica, por exemplo, respondendo a "Minha cabeça dói" com "Por que você diz que sua cabeça dói?".
Durante a década de 1970, muitos programadores começaram a escrever "ontologias conceituais", que estruturaram a informação do mundo real em dados compreensíveis por computadores. Exemplos são MARGIE (SCHANK, 1975), SAM (CULLINGFORD, 1978), PAM (WILENSKY, 1978), TaleSpin (MEEHAN, 1976), QUALM (LEHNERT, 1977), Politics (CARBONELL, 1979) e Plot Units (LEHNERT, 1981 ). Neste período, muitos chatterbots foram escritos, como PARRY, Racter e Jabberwacky.
Até a década de 1980, a maioria dos sistemas de PLN se baseava em conjuntos complexos de regras manuscritas. A partir do final dos anos 1980, no entanto, houve uma revolução no PLN com a introdução de algoritmos de aprendizagem automática (aprendizado de máquina) para o processamento de linguagem. Isto foi devido tanto ao aumento constante do poder computacional (ver Lei de Moore) quanto à diminuição gradual da dominância das teorias da linguística chomskyanas (como a gramática gerativa), cujos fundamentos teóricos desestimularam o tipo de corpus linguístico que está subjacente à abordagem da aprendizagem automática ao processamento da linguagem.
Alguns dos algoritmos de aprendizado de máquinas mais antigos, como as árvores de decisão, produziam sistemas de regras rígidas então semelhantes às regras existentes na escritas à mão. No entanto, a marcação de partes da fala (part-of-speech tagging) introduziu o uso de modelos ocultos de Markov para o PLN e, cada vez mais, a pesquisa se concentrava em modelos estatísticos, que tomam decisões suaves e probabilísticas baseadas na atribuição de pesos reais aos recursos que compõem dados de entrada. Os modelos de linguagem de cache, sobre os quaismuitos sistemas de reconhecimento de fala agora dependem, são exemplos de tais modelos estatísticos. Esses modelos são geralmente mais robustos quando dados informações desconhecidas, especialmente entrada que contém erros (como é muito comum para dados do mundo real) e produzem resultados mais confiáveis quando integrados em sistemas maiores que compreendem múltiplas tarefas.
Muitos dos sucessos iniciais notáveis ocorreram no campo da tradução automática, devido especialmente ao trabalho de pesquisa da IBM, que desenvolveu modelos estatísticos mais elaborados. Estes sistemas foram capazes de tirar proveito de corpora textuais multilíngues existentes produzidos pelo Parlamento do Canadá e a União Europeia como resultado de leis que exigem a tradução de todos os processos governamentais em todas as línguas oficiais dos países. No entanto, a maioria dos sistemas dependia de corpora desenvolvido especificamente para tarefas implementadas por esses sistemas, o que era (e muitas vezes continua sendo) uma grande limitação no sucesso dos mesmo. Como resultado, uma grande quantidade de pesquisa passou de quantidades de dados limitadas a métodos de aprendizagem mais eficazes.
Pesquisas recentes têm se concentrado cada vez mais em algoritmos de aprendizagem semi-supervisionados e sem supervisão. Esses algoritmos são capazes de aprender com dados que não foram anotados manualmente com as respostas desejadas ou usando uma combinação de dados anotados e não anotados. Geralmente, esta tarefa é muito mais trabalhosa do que a aprendizagem supervisionada e normalmente produz resultados menos precisos para uma quantidade específica de dados de entrada. No entanto, há uma enorme quantidade de dados não anotados disponíveis (incluindo, entre outras coisas, todo o conteúdo da World Wide Web), que muitas vezes pode compensar os resultados inferiores.
2.2- Aprendizagem de maquina
Os algoritmos modernos de PLN baseiam-se na aprendizagem mecânica, especialmente na aprendizagem de máquinas estatísticas. O paradigma da aprendizagem mecânica é diferente do da maioria das tentativas anteriores de processamento da linguagem. Anteriormente, implementações de tarefas de processamento de linguagem envolviam a codificação direta de grandes conjuntos de regras. O paradigma da aprendizagem automática (ou aprendizagem automática) induz a aprendizagem automática de regras através de análises de corpora de exemplos típicos do mundo real ao invés de usar algoritmos gerais de aprendizagem (muitas vezes, embora nem sempre, baseados em inferência estatística). Um corpus (plural "corpora") é um conjunto de documentos (ou frases individuais) que foram anotados à mão com os valores corretos a serem aprendidos.
Muitas classes diferentes de algoritmos de aprendizado de máquina foram aplicadas a tarefas de PLN. Esses algoritmos tomam como entrada um grande conjunto de "recursos" que são gerados a partir de dados de entrada.
Alguns dos algoritmos mais usados, como árvores de decisão, produziam sistemas de regras rígidas semelhantes aos sistemas de regras manuscritas mais comuns. No entanto, cada vez mais, a pesquisa tem se concentrado em modelos estatísticos, que tomam decisões flexíveis e probabilísticas baseadas em agregar pesos reais a cada característica de entrada. Tais modelos têm a vantagem de poder expressar a certeza relativa de muitas respostas possíveis diferentes em vez de apenas uma, produzindo resultados mais confiáveis quando esse modelo é incluído como um componente de um sistema maior.
Os sistemas baseados em algoritmos de aprendizagem mecânica têm muitas vantagens em relação às regras produzidas manualmente:
Os procedimentos de aprendizagem usados durante a aprendizagem da máquina focam-se automaticamente nos casos mais comuns, ao passo que quando se escrevem regras à mão, não é óbvio em que sentido o esforço deve ser dirigido.
Os procedimentos de aprendizagem automática podem fazer uso de algoritmos de inferência estatística para produzir modelos que são robustos a entradas não familiares (por exemplo, contendo palavras ou estruturas que não foram vistas antes) e a entradas errôneas (por exemplo, com palavras ou palavras incorretamente omitidas). Geralmente, lidar com essas entradas de forma com regras manuscritas ou sistemas de regras manuscritas que tomam decisões suaves é extremamente trabalhoso, propenso a erros e demorado.
Sistemas baseados em aprender automaticamente as regras podem ser mais precisos simplesmente fornecendo mais dados de entrada. No entanto, os sistemas baseados em regras escritas à mão só podem ser tornados mais precisos aumentando a complexidade das regras, o que é uma tarefa muito mais difícil. Em particular, há um limite para a complexidade de sistemas baseados em regras artesanais, para além dos quais os sistemas se tornam cada vez mais incontroláveis. No entanto, a criação de mais dados para entrada em sistemas de aprendizado de máquina requer simplesmente um aumento correspondente no número de horas trabalhadas por humanos, geralmente sem aumentos significativos na complexidade do processo de anotação.
O subcampo de PLN dedicado a abordagens de aprendizagem é conhecido como aprendizagem de linguagem natural (NLL) e sua conferência, a CoNLL, e orgão central, o SIGNLL, são patrocinados pela ACL, reconhecendo também as suas ligações com linguística computacional e aquisição de linguagem. Quando o objetivo da pesquisa de aprendizagem de linguagem computacional é entender mais sobre aquisição de linguagem humana, ou psicolinguística, a NLL sobrepõe-se no campo relacionado de psicolinguística computacional.
3- Codificação Fluxograma
Fluxograma é um tipo de diagrama, e pode ser entendido como uma representação esquemática de um processo ou algoritmo, muitas vezes feito através de gráficos que ilustram de forma descomplicada a transição de informações entre os elementos que o compõem, ou seja, é a sequência operacional do desenvolvimento de um processo, o qual caracteriza: o trabalho que está sendo realizado, o tempo necessário para sua realização, a distância percorrida pelos documentos, quem está realizando o trabalho e como ele flui entre os participantes deste processo.
Os fluxogramas são muito utilizados em projetos de software para representar a lógica interna dos programas, mas podem também ser usados para desenhar processos de negócio e o workflow que envolve diversos atores corporativos no exercício de suas atribuições. 
O Diagrama de fluxo de dados (DFD) utiliza do Fluxograma para modelagem e documentação de sistemas computacionais.
O termo Fluxograma designa uma representação gráfica de um determinado processo ou fluxo de trabalho, efetuado geralmente com recurso a figuras geométricas normalizadas e as setas unindo essas figuras geométricas. Através desta representação gráfica é possível compreender de forma rápida e fácil a transição de informações ou documentos entre os elementos que participam no processo em causa.
O fluxograma pode ser definido também como o gráfico em que se representa o percurso ou caminho percorrido por certo elemento (por exemplo, um determinado documento), através dos vários departamentos da organização, bem como o tratamento que cada um vai lhe dando.
A existência de fluxogramas para cada um dos processos é fundamental para a simplificação e racionalização do trabalho, permitindo a compreensão e posterior otimização dos processos desenvolvidos em cada departamento ou área da organização.
4- Funções em programação estruturada
Funções
As funções são encapsulamentos de códigos a fim de deixar o programa mais prático, mais legível e dividi-lo em partes.
A vantagem da função é que se for preciso alterar alguma coisa no código será alterado somente uma vez no escopo da função e toda vez que for chamada aquela parte do código ela já será carregada com as novas configurações.
As funções são constituídas primeiramente por um tipo (int, float, dooble, char, ou um tipo definido) logo em seguida por um nome (que é dado pelo programador) e seguido de abre parênteses ‘(‘se tiver parâmetros (parâmetros são como portas, os dados que você quer que a função receba da função principal, a função main() ).
Se eu quiser receber dois números inteiros da função main eu teria uma função do tipo:
void exemplo(int x, int b)
{
int resultado;
resultado = x + b;
}
As funções são como se pegasse uma parte de código responsável por fazer algum tipo de operação ou qualquer outro processo e a colocasse entre as sintaxes necessárias para se criar uma função, evitando assim de toda vez que precisarmos realizar alguma operação de ter que reescrever todo o código novamente.
Toda função precisa retornar um valor, exceto as do tipo void (funções do tipo void retornam sim um valor mas ele pode ser considerado desprezível nessas circunstâncias) o retorno é feito da seguinte forma:
return valor numérico;
ex: return 1;
Então, a nossa função exemplo() ficaria da seguinte forma se escrevêssemos ela do tipo int:
int exemplo(int x, int b)
{
int resultado;
resultado = x+b;
return resultado;
}
Parâmetros de Funções
Como foi dito logo no início, sobre variáveis. Existe dois modos de variáveis, as globais(que são reconhecidas em todo programa) e as locais(que são reconhecidas apenas dentro da função do qual ela foi declarada, após o termino da execução da função, ela é destruída).
Até o presente momento, não tem como acessar variáveis ou valores contidos em outras funções, para resolver este problema é serve os parâmetros de funções.
Por exemplo, eu tenho um programinha que possui duas funções mas uma função principal onde está rolando o programa, e uma função que é responsável por somar dois números, para mim passar esses dois números para a função soma eu preciso dos parâmetros.
Ex:
int soma(int num, int num1);
main()
{
int x, y, resultado;
cout << “\n\n Digite um numero:      ”;
cin >> x;
cout << “\n\n Digite um numero:      ”;
cin >>y;
resultado = soma(x,y);
cout << “\n\n O resultado é:     ” << resultado;
}
int soma(int num, int num1)
{
int resultado;
resultado = num + num1;
return resultado;
}
Depois do nome soma, o nome da função, entre os parênteses é que estão a declaração de parâmetros, ou seja, as “portas” de comunicação entre a função soma e a função principal, a função main(), portanto, sempre que eu quiser passar uma  quantidade X de números de uma função para outra, esse numero X de parâmetros é que devo ter na minha outra função.
Nesse caso, eu precisaria de passar dois valores inteiros para a minha função soma, por isso declarei dois parâmetros do tipo inteiro para mina função soma
	
REFERÊNCIAS

Mais conteúdos dessa disciplina