terça-feira, 24 de maio de 2022

Criação da tabela Questão e inserção de dados

 Criação e da tabela "questao" dentro do banco de dados "simuladosgratis" para manipulação de dados

 CREATE TABLE questao (  
   id_questao int(5) unsigned primary key auto_increment,  
   ano smallint(2) not null,  
   banca varchar(20) not null,  
   cargo varchar(100) not null,  
   escolaridade varchar(20) not null,  
   estado_uf varchar(25) not null,  
   orgao varchar(20) not null,  
   materia varchar(50) not null,  
   bol_multipla_escolha boolean default false,  
   questao text not null,  
   alternativa_a text,  
   bol_alternativa_a_resposta boolean default false,  
   alternativa_b text,  
   bol_alternativa_b_resposta boolean default false,  
   alternativa_c text,  
   bol_alternativa_c_resposta boolean default false,  
   alternativa_d text,  
   bol_alternativa_d_resposta boolean default false,   
   alternativa_e text,  
   bol_alternativa_e_resposta boolean default false   
 );  

Massa de dados

 INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Administração Pública',false,'O Modelo de Marco Lógico é um modelo analítico para orientar a formulação, a execução, o acompanhamento e a avaliação de programas sociais. Assinale a alternativa INCORRETA a respeito do Marco Lógico.','a) O Marco Lógico deve demonstrar a compatibilidade lógica entre, sucessivamente, a finalidade (impacto da ação governamental), o objetivo, os produtos e as atividades.',false,'b) A estrutura do Marco Lógico corresponde a uma matriz de quatro por quatro, onde as linhas apresentam informações acerca dos objetivos, indicadores, meios de verificação e pressupostos em quatro momentos diferentes da vida de um projeto ou programa governamental.',false,'c) Os passos a serem seguidos na elaboração do Marco Lógico são: definição da finalidade; descrição do objetivo do programa; identificação dos produtos; e listagem das atividades.',false,'d) O Marco Lógico é sempre um método participativo, não podendo ser construído apenas por técnicos, baseando-se nas informações e nos documentos existentes sobre um programa.',true,'e) O Marco Lógico exige que se identifiquem as informações a respeito dos indicadores, pois obriga o avaliador a localizar as fontes de informações existentes ou planejar a forma de coleta dessas informações.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito do Trabalho',false,'Conforme jurisprudência predominante do Tribunal Superior do Trabalho (Tribunal Pleno ou Seção de Dissídios Individuais 1 - SDI-1), quanto à denominada sucessão trabalhista:','a) celebrado contrato de concessão de serviço público em que uma empresa (1ª concessionária) outorga a outra ( 2ª concessionária), no todo ou em parte, mediante arrendamento ou qualquer outra forma contratual, a título transitório, bens de sua propriedade, a responsabilidade pelos direitos dos trabalhadores cujos contratos de trabalho se extinguiram antes da vigência da concessão é da antecessora ( 1ª concessionária), sem prejuízo da responsabilidade subsidiária da sucessora ( 2ª concessionária).',false,'b) na mesma situação do contrato de concessão de serviço público figurada na letra A acima exposta, havendo contrato de trabalho extinto após a entrada em vigor da concessão, a responsabilidade por todos os direitos decorrentes desse contrato de trabalho é exclusivamente da segunda concessionária, na condição de sucessora.',false,'c) adquirida uma empresa pertencente a um grupo econômico, o adquirente (sucessor) não responde solidariamente por débitos trabalhistas de empresa integrante desse mesmo grupo não adquirida por ele, irrelevante a situação econômico-financeira desta segunda empresa na época daquela citada aquisição.',false,'d) criando-se novo município por desmembramento, cada uma das novas entidades ( esse novo município e aquele do qual houve o desmembramento) responsabiliza-se pelos direitos trabalhistas do empregado nos respectivos períodos em que elas figurarem como empregador.',true,'e) a legislação do trabalho rural tem regras da sucessão trabalhista diversas das atinentes ao trabalho urbano.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Administração Pública',false,'Com relação às metodologias de avaliação de projetos sociais, assinale a alternativa INCORRETA:','a) O método de Análise Custo-Benefício compara os custos (monetários) com os benefícios econômicos do projeto.',false,'b) O método de Análise do Custo Mínimo deixa de lado a análise dos benefícios, assumindo que eles derivam de uma decisão política. Dedica-se a assegurar que os benefícios sejam alcançados com custos mínimos. Limita-se, portanto, a garantir a eficiência, via minimização de custos, omitindo-se a respeito da eficácia do projeto.',false,'c) O método de Análise Custo-Impacto compara os custos (monetários) com a possibilidade de alcançar eficientemente os objetivos do projeto. Entretanto não se restringe a avaliar a eficiência de um projeto, mas também avalia seu impacto, determinando em que medida o projeto alcançará ou alcançou seus objetivos, que mudanças produzirá ou produziu na população-objetivo e quais são seus efeitos secundários.',false,'d) O método de Análise do Custo Mínimo somente pode ser utilizado em avaliações ex-ante.',true,'e) O método de Análise Custo-Impacto se pode aplicar tanto na avaliação ex-ante como na ex-post.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito do Trabalho',false,'Conforme jurisprudência predominante do Tribunal Superior do Trabalho (Tribunal Pleno ou Seção de Dissídios Individuais 1 - SDI-1), quanto ao aviso prévio:','a) a proporcionalidade do aviso prévio, prevista constitucionalmente, pode ser definida por sentença em reclamatória trabalhista, prescindindo de legislação.',false,'b) reconhecida a culpa recíproca na rescisão do contrato de trabalho, não tem o empregado direito a qualquer valor correspondente a aviso prévio.',false,'c) concedido auxílio-doença no curso do aviso prévio, interrompe-se a contagem do seu prazo, que se reinicia, por inteiro, após a cessação daquele benefício.',false,'d) na fluência de garantia de emprego, não tem validade a concessão do aviso prévio.',true,'e) a cessação da atividade da empresa com o pagamento da denominada multa de 40% do valor dos depósitos do FGTS e entrega da guia para saque desses depósitos exclui o direito do empregado ao aviso prévio.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito do Trabalho',false,'Conforme jurisprudência predominante do Tribunal Superior do Trabalho (Tribunal Pleno ou Seção de Dissídios Individuais 1 - SDI - 1), quanto à rescisão do contrato de trabalho e à justa causa:','a) a prática pelo empregado de qualquer justa causa, no decurso do prazo do aviso prévio dado pelo empregador, retira do trabalhador direito às verbas rescisórias de caráter indenizatório.',false,'b) servidor de empresa pública estadual ou municipal admitido mediante aprovação em concurso público não pode ser validamente despedido por ato imotivado.',false,'c) a pessoa jurídica de direito público sujeita-se à multa prevista no artigo 477, § 8º, da Consolidação das Leis do Trabalho, por descumprimento do prazo legal para pagamento das verbas rescisórias.',true,'d) presume-se válido o recibo de quitação de rescisão do contrato de trabalho do empregado, com mais de um ano de serviço, da Administração Pública Estadual Direta, Autárquica, Fundacional, e das respectivas Empresas Públicas, embora não cumprida a exigência formal de assistência prevista no artigo 477, §§ 1º e 3º, da Consolidação das Leis do Trabalho.',false,'e) a aposentadoria espontânea causa a extinção do contrato de trabalho, permanecendo ou não o empregado a prestar serviços ao empregador após a jubilação.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Matemática Financeira',false,'A aplicação de R$ 22.000,00 em um fundo que rende juros compostos à taxa de 2% ao mês acumula um saldo apos o 7o mês de','a) R$ 3.080,00.',false,'b) R$ 3.271,40.',false,'c) R$ 25.080,00.',false,'d) R$ 25.271,40.',true,'e) R$ 27.900,40.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito do Trabalho',false,'Conforme jurisprudência predominante do Tribunal Superior do Trabalho (Tribunal Pleno ou Seção de Dissídios Individuais 1 - SDI 1), quanto ao contrato de trabalho e à sua remuneração, bem como às normas gerais de tutela do trabalho:','a) reconhecida a nulidade do contrato de trabalho do empregado público, por violação da exigência prevista no artigo 37, II, combinado com o § 2º, da Constitucional Federal de 1988, celebrado ele antes da vigência da regra legal determinando o depósito do FGTS quando mantido o direito ao salário nessa hipótese de nulidade, aplica-se dita regra àquele contrato.',true,'b) o desrespeito ao intervalo mínimo interjornadas previsto no artigo 66 da Consolidação das Leis do Trabalho não acarreta os mesmos efeitos legais do descumprimento do intervalo mínimo intrajornada previstos no artigo 471, § 4º, da mesma consolidação.',false,'c) desvirtuada a finalidade do contrato de estágio de estudante, celebrado na vigência da Constituição Federal de 1988, reconhece-se o vínculo empregatício com o ente da Administração Pública Indireta que o contratou.',false,'d) é ilícito o pagamento do piso salarial ou do salário mínimo proporcional à duração diária ou à duração semanal do trabalho contratadas em níveis inferiores às máximas previstas constitucionalmente.',false,'e) extinto o contrato de trabalho com duração inferior a um ano por pedido de demissão, o empregado não tem direito a férias proporcionais (período aquisitivo incompleto), mas tem direito a décimo terceiro salário proporcional.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Matemática Financeira',false,'A taxa efetiva anual equivalente à taxa nominal de 18% ao semestre capitalizados mensalmente é','a) 15,08%.',false,'b) 21,49%.',false,'c) 25,66%.',false,'d) 19,41%.',false,'e) 42,58%.',true);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito Previdenciário',false,'Na lição de Carlos Alberto Pereira de Castro e João Batista Lazzari (Manual de Direito Previdenciário, 12ª edição, Campinas: Editora Conceito Editorial, 2010, pp. 114-115) "O princípio (...), pressupõe que os benefícios são concedidos a quem deles efetivamente necessite, razão pela qual a Seguridade Social deve apontar os requisitos para a concessão de benefícios e serviços. Vale dizer, para um trabalhador que não possua dependentes, o benefício salário-família não será concedido; para aquele que se encontre incapaz temporariamente para o trabalho, por motivo de doença, não será concedida a aposentadoria por invalidez, mas o auxílio-doença. Não há um único benefício ou serviço, mas vários, que serão concedidos e mantidos de forma (...), conforme a necessidade da pessoa." O excerto refere-se ao princípio constitucional:','a) da universalidade da cobertura e do atendimento.',false,'b) da uniformidade e da equivalência dos benefícios serviços.',false,'c) da seletividade e distributividade na prestação dos benefícios e serviços.',true,'d) da equidade na forma de participação no custeio.',false,'e) da diversidade da base de financiamento dos benefícios e serviços.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Matemática Financeira',false,'Um a pessoa faz aplicações mensais iguais a R$ 2.000,00 num fundo que remunera a taxa de juros compostos de 1% ao mês. Após a 10a aplicação o saldo do fundo é','a) R$ 18.942,60.',false,'b) R$ 20.000,00.',false,'c) R$ 20.924,00.',true,'d) R$ 21.120,00.',false,'e) R$ 22.092,00.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito Previdenciário',false,'O Regime Geral de Previdência Social, tal como constitucionalmente previsto:','a) é de caráter compulsório para os agentes públicos ocupantes de cargos efetivos e vitalícios.',false,'b) é facultativo aos agentes públicos ocupantes de cargos efetivos e vitalícios.',false,'c) é de caráter compulsório para os magistrados, membros do Ministério Público e de Tribunais de Contas, desde que de nível federal.',false,'d) é de caráter compulsório para os trabalhadores que possuem relação de emprego regida pela Consolidação das Leis do Trabalho, para os trabalhadores autônomos, eventuais ou não, para os empresários, para os trabalhadores avulsos, para os pequenos trabalhadores rurais, pescadores artesanais, garimpeiros, sacerdotes e empregados de organismos estrangeiros no Brasil.',true,'e) é facultativo para os trabalhadores que possuem relação de emprego regida pela Consolidação das Leis do Trabalho, para os trabalhadores autônomos, eventuais ou não, para os empresários, para os trabalhadores avulsos, para os pequenos trabalhadores rurais, pescadores artesanais, garimpeiros, sacerdotes e empregados de organismos estrangeiros no Brasil.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito Previdenciário',false,'Os membros do Poder Judiciário estadual, assim como os membros do Ministério Público estadual e também os membros de Tribunais de Contas estaduais:','a) são, em caráter compulsório, filiados ao Regime Geral de Previdência Social.',false,'b) são, em caráter facultativo, filiados ao Regime Geral de Previdência Social.',false,'c) são filiados a Regime Previdenciário próprio, em virtude da autonomia estatal em face do princípio federativo e do estatuído a partir da Emenda Constitucional nº 42/2003.',false,'d) são filiados a Regime Previdenciário próprio, em virtude da autonomia estatal em face do princípio federativo e do estatuído a partir da Emenda Constitucional nº 43/2003.',false,'e) são filiados a Regime Previdenciário próprio, em virtude da autonomia estatal em face do princípio federativo e do estatuído a partir da Emenda Constitucional nº 41/2003.',true);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito Administrativo',false,'Para efeitos de percepção, a inclusão no cálculo dos benefícios das parcelas remuneratórias pagas em decorrência de função de confiança ou de cargo em comissão:','a) é totalmente vedada em qualquer hipótese.',false,'b) é permitida sempre que os respectivos pagamentos tenham ocorrido por um ano ou mais.',false,'c) é permitida se comprovado que o servidor implementou os requisitos da aposentadoria por invalidez no exercício da função.',false,'d) é permitida no caso do abono de permanência.',false,'e) somente é permitida quando tais parcelas integrarem a remuneração do servidor que se aposentar com fundamento no art. 40 da Constituição Federal, respeitando-se, em qualquer hipótese, o limite estabelecido no § 2º do referido artigo.',true);   
  INSERT INTO questao VALUES(default,2011,'FMP-RS','Auditor Público Externo - Administração','Superior','Rio Grande do Sul','TCE-RS','Matemática Financeira',false,'A média e o desvio padrão dos salários dos empregados de determinada empresa são, respectivamente, R$ 1.000,00 e R$ 200,00. Está previsto para o próximo ano um aumento salarial de 5%, mais uma parcela fixa de R$ 70,00. O coeficiente de variação do novo salário desses empregados será:','a) 0,1875.',true,'b) 5,3333.',false,'c) 0,2500.',false,'d) 4,0000.',false,'e) 0,2000.',false);   
  INSERT INTO questao VALUES(default,2011,'FMP-RX','Auditor Público Externo - Ciências Jurídicas e Sociais','Superior','Rio Grande do Sul','TCE-RS','Direito Previdenciário',false,'No que diz respeito à revisão dos proventos de aposentadoria, é correto afirmar que:','a) orienta-se pelas leis vigentes ao tempo em que o servidor reuniu os requisitos necessários à confirmação do direito.',true,'b) inclui todas as vantagens que, depois do ato de aposentação, venham a ser conferidas aos servidores ativos.',false,'c) inclui, dentre outros, o auxílio-alimentação.',false,'d) contempla exclusivamente o auxílio-alimentação.',false,'e) garante de modo absoluto a paridade de vencimentos com os servidores ativos para os aposentados que tenham ingressado no serviço público depois da vigência da Emenda Constitucional nº 47.',false);  
  INSERT INTO questao VALUES(default,2014,'FUNCAB','Primeiro Tenente - Clínico Geral','Superior','Rondonia','PM-RO','História e Geografia de Estados e Municípios',false,'Entre os municípios de Rondônia a seguir, assinale o que possui fronteira com a Bolívia.','a) Jaru',false,'b) Ji-Paraná.',false,'c) Chupinguaia.',false,'d) Costa Marques.',true,'e) Rolim de Moura.',false);  
  INSERT INTO questao VALUES(default,2014,'FUNCAB','Primeiro Tenente - Clínico Geral','Superior','Rondonia','PM-RO','História e Geografia de Estados e Municípios',false,'O estado de Rondônia já possuiu outras denominações, como Território do Guaporé. A mudança na denominação de Território Federal do Guaporé para Território Federa! de Rondônia ocorreu na seguinte década do século XX:','a) Quarenta',false,'b) Cinquenta.',true,'c) Sessenta.',false,'d) Setenta.',false,'e) Oitenta.',false);  
  INSERT INTO questao VALUES(default,2013,'FUMARC','Analista da Polícia Civil - Estatística','Superior','Minas Gerais','PC-MG','Estatística',false,'Em 2010, o preço médio de certo artigo era 20% superior ao de 2009, 10% inferior ao de 2008 e 25% superior ao de 2011. O índice de preço relativo do ano de 2011, adotando 2008 como ano-base, é:','a) 72,00',false,'b) 75,00',false,'c) 90,00',false,'d) 125,00',true,'null',false);  
  INSERT INTO questao VALUES(default,2013,'FUMARC','Analista da Polícia Civil - Estatística','Superior','Minas Gerais','PC-MG','Estatística',false,'Considerando que o número de horas perdidas com acidentes de trabalho em uma indústria por semana é uma variável aleatória normalmente distribuída com média 40 horas e variância 16 horas 2 , é CORRETO afirmar:','a) A probabilidade de o número de horas perdidas com acidentes de trabalho em uma semana estar entre 40 e 44 horas é igual a 0,8413.',true,'b) A probabilidade de o número médio de horas perdidas com acidentes de trabalho em quatro semanas consecutivas ser maior que 60 horas é menor que ¼.',false,'c) A probabilidade de o número médio de horas perdidas com acidentes de trabalho em quatro semanas consecutivas ser menor que 40 horas é praticamente zero.',false,'d) Caso a indústria consiga diminuir a variância, mantendo a média em 40 horas, a probabilidade de o número de horas perdidas com acidentes de trabalho em uma semana superar 40 unidades também irá diminuir.',false,'null',false); 



segunda-feira, 28 de fevereiro de 2022

História do MySQL e MariaDB

 O MySQL é um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface.

É atualmente um dos sistemas de gerenciamento de bancos de dados mais populares do mundo, com mais de 10 milhões de instalações

E o MariaDB que é um fork do MySQL e que a princípio, é totalmente compatível com a versão anterior.


História do MySQL e MariaDB

Por volta de 1979 Michael 'Monty' Widenius, que foi o  principal autor da versão original do MySQL, desenvolveu um banco de dados chamado UNIREG, sendo rescritos em várias linguagens desde então. 

Em 1985 fundou a TCX DataKonsult, uma empresa de armazenamento de dados juntamente com Allan Larsson, que também foi um dos criadores do MySQL

Em 1994, a empresa TcX começou o desenvolvimento de aplicações baseadas na Web, tendo como base o banco UNIREG, porém esse banco possuía muito "overhead" para obter sucesso em uma aplicação para geração de páginas dinâmicas na Web. Então a empresa TcX começou a procurar por outro banco e acabou selecionando o mSQL, uma ferramenta baseada em SQL mas com características pobres não possuindo por exemplo suporte a índices, e com desempenho inferior ao UNIREG.

Foi então que Widenius contatou o David Hughes criador do mSQL, para saber do interesse dele em unir os dois bancos. Sendo positivo o interesse de David , a empresa TcX resolveu desenvolver um novo banco, mas mantendo ao máximo a compatibilidade com mSQL. TcX foi esperta o suficiente para não reinventar o que já estava bem feito, ela construiu seu servidor baseado na estrutura que já estava montada do UNIREG e utilizou grande número de utilitários escritas para mSQL e fez API's para o novo servidor praticamente iguais ao mSQL. Como resultado usuários do mSQL que decidissem mudar para o novo servidor da TcX, teriam apenas que fazer pequenas e simples mudanças nos códigos existentes.

Então foi me maio de 1995 que, definitivamente, a primeira versão do MySQL foi lançada. Um dos parceiros da TcX sugeriu a distribuição do servidor na Internet, o objetivo disso era a utilização de um modelo pioneiro desenvolvido por Aladdin Peter Deutsch. O resultado foi um maior flexibilidade em sem "copyright", que fez do MySQL mais difundido gratuitamente do que mSQL.

O MySQL foi criado para ser um banco de dados relacional que pudesse tratar uma grandes quantidades de dados a um custo de hardware relativamente barato, ele é um dos dos bancos dados relacionais mais rápidos do mercado, apresenta quase todas as funcionalidades dos grandes bancos e possui uma linguagem simples, em que você facilmente pode gravar, alterar e recuperar informações com segurança e rapidez

No dia 16 de Janeiro de 2008, a MySQL AB, desenvolvedora do MySQL foi adquirida pela Sun Microsystems, a dona do Java, por US$ 1 bilhão, um preço jamais visto no setor de licenças livres.

Windenius a deixar a empresa em 5 de fevereiro de 2009 logo após o lançamento da versão 5.1 do MySQL, com a qual estava insatisfeito.

No dia 20 de Abril de 2009, foi anunciado que a Oracle compraria a Sun Microsystems e todos os seus produtos, incluindo o MySQL. 

A Oracle Corporation é fornecedora do maior banco de dados de código fechado até hoje, o banco de dados Oracle.

Era uma concorrente direta do MySQL e virtualmente não gostava de licenças livres

O medo do monopólio e que a oracle comprasse o MySQL somente para matá-lo fez com que o Windenius fizesse um apelo dramático para os seus seguidores, pedindo que eles solicitacem que a Comissão Europeia para a investigar a formação de monopólio, porém a compra foi aprovada

Em maio de 2009 a oracle adiquire a sun com o mysql, para o desespero de muitos


Maria DB

MariaDB teve seu primeiro lançamento em outubro de 2009, Era um fork destinado a “assegurar que a base de código MySQL seria livre para sempre”.

A intenção principal do projeto é manter uma alta fidelidade com o MySQL.

MariaDB é mantido atualizado com a última versão do MySQL e irá funcionar exatamente como MySQL. Todos os comandos, interfaces, bibliotecas e APIs que existem no MySQL também existem no MariaDB. Não há necessidade de conversão de dados para exibir MariaDB.

Para conseguir isso, a Monty Program AB trabalha para contratar os melhores e mais brilhantes desenvolvedores do setor, em estreita cooperação com a maior comunidade de usuários e desenvolvedores no verdadeiro espírito do software livre e open source de uma forma que equilibre a previsibilidade com confiabilidade

MariaDB é um avançado substituto para o MySQL e está disponível sob os termos da licença GPL v2.

A segurança é muito importante no mundo de hoje e é um foco especial para os desenvolvedores do MariaDB. O projeto mantém os seus próprios patches de segurança situados no core de MySQL. Para cada versão do MariaDB os desenvolvedores também incluem todos os patches de segurança do MySQL e suas melhorias, caso necessário. Quando problemas de segurança críticos são descobertos, os desenvolvedores imediatamente preparam e distribuem novas versões do MariaDB para obter as correções o mais rápido possível.

Muitos dos problemas de segurança encontrados no MySQL e MariaDB foram encontrados e relatados pela equipe MariaDB. A equipe trabalha em estreita colaboração com o MariaDB http://cve.mitre.org/ para garantir que todas as questões de segurança sejam prontamente comunicadas e explicadas o mais detalhadamente possível.

Widenius prometeu: “Quando a Oracle lançar uma extensão de código fechado para o MySQL, nós também lançaremos uma de código aberto.


Uma coisa interessante

Windenius vive em Helsínquia com a sua segunda esposa Anna e sua filha mais nova, Maria. Widenius tem três filhos – My, Max e Maria – que foram as inspirações para os nomes MySQL[8], MaxDB e a distribuição MySQL-Max, e MariaDB


Links úteis

https://kinsta.com/pt/blog/mariadb-vs-mysql/

https://pt.wikipedia.org/wiki/MySQL

https://pt.wikipedia.org/wiki/Michael_Widenius

https://pt.wikipedia.org/wiki/MariaDB

https://en.wikipedia.org/wiki/MariaDB



 

sábado, 22 de janeiro de 2022

Lógica de Programação - Ordenação Heap Sort

 O algoritmo Heapsort consiste de duas fases

1. construir um Heap de um vetor arbitrário

2. usar o Heap para ordenar os dados


Heaps são árvores binárias. É importante deixar claro desde já que são árvores binárias, mas não são árvores binárias de pesquisa. Mais especificamente, duas propriedades definem o Heap:

1. O valor de um nó é maior ou igual ao valor de seus filhos;

2. O Heap é uma árvore binária completa ou quase-completa da esquerda para a direita.


A adição de um novo elemento sempre é feita na próxima posição livre do array. Essa estratégia garante que o Heap sempre será completo ou quase completo da esquerda para a direita.



Dado n números a serem ordenados

1. Coloque os dados em uma árvore binária

2. Repetir os seguintes passos, 

2.1. Verificar se um nó filho é menor que o pai, 

2.2 Se for, realize a troca


Vetor transformado em árvore binária




Árvore Binária (heap), após a troca de dados entre pais e filhos onde os filhos tenham valores maiores que os pais



Agora pegamos e eliminamos o maior valor da árvore (raiz) e jogamos na última casa do vetor, usamos heap para reorganizar os dados e refazemos o processo, pegando a nova raiz e colocando na penúltima posição do vetor.

Refazemos o processo até que a árvore esteja totalmente eliminada e o vetor ordenado



Código fonte:

Algoritmo "heapsort"  
 // Descrição  : Ordenação por heapsort  
 // Autor(a)  : Cléuber José  
 // Data atual : 22/12/2020  
 Const  
   TAM_VETOR=10  
 Var  
 // Seção de Declarações das variáveis   
    vet :vetor [1..TAM_VETOR] de inteiro  
    i,aux, filho: inteiro  
 procedimento mostrar_vetor()  
 inicio  
   escreval("")  
   escreval("------Dados do vetor------")  
   para i de 1 ate TAM_VETOR faca  
    escreva(vet[i]," ")  
   fimpara  
   escreval("")  
   escreval("--------------------------")  
 fimprocedimento  
 procedimento gerar_dados_vetor()  
 var  
   j:inteiro  
 inicio  
   para i de 1 ate TAM_VETOR faca  
    vet[i]<-i  
   fimpara  
   para i de 1 ate int(TAM_VETOR/2) passo 2 faca  
    aux<-vet[i]  
    vet[i]<-vet[TAM_VETOR+1-i]  
    vet[TAM_VETOR+1-i]<-aux  
   fimpara  
   para i de 1 ate int(TAM_VETOR/2) passo 1 faca  
    j<-randI(TAM_VETOR)+1  
    aux<-vet[i]  
    vet[i]<-vet[j]  
    vet[j]<-aux  
   fimpara  
 fimprocedimento  
 procedimento criar_heap(pai, tamanho:inteiro)  
 inicio  
   aux<-vet[pai]  
   filho<-pai*2  
   enquanto filho<=tamanho faca  
    se(filho <tamanho) entao  
      se vet[filho]<vet[filho+1] entao  
       filho<-filho+1  
      fimse  
    fimse  
    se aux<vet[filho] entao  
      vet[pai]<-vet[filho]  
      pai<-filho  
      filho<-2*pai  
    senao  
      filho<-tamanho+1  
    fimse  
   fimenquanto  
   vet[pai]<-aux  
 fimprocedimento  
 procedimento heap_sort()  
 inicio  
   escreval(int(TAM_VETOR/2))  
   para i de int(TAM_VETOR/2) ate 1 passo -1 faca  
    criar_heap(i,TAM_VETOR)  
   fimpara  
   para i de TAM_VETOR ate 2 passo -1 faca  
    aux<-vet[1]  
    vet[1]<-vet[i]  
    vet[i]<-aux  
    criar_heap(1, i-1)  
   fimpara  
 fimprocedimento  
 Inicio  
 // Seção de Comandos, procedimento, funções, operadores, etc...   
   escreval("---Ordenação por Heapsort---")  
   gerar_dados_vetor()  
   mostrar_vetor()  
   heap_sort()  
   mostrar_vetor()  
 Fimalgoritmo  




quinta-feira, 13 de janeiro de 2022

Estruturas de Dados Avançadas - Árvore Binária com VisuAlg

Para a implementação e uma árvore binária há duas estratégias de alocação de memória, estática ou dinâmica

A mais utilizada é a dinâmica, nela, cada nó da árvore é tratado como um ponteiro alocado dinamicamente a medida que os dados são inseridos

Não precisa saber o tamanho da árvore, os nós são criados a medida que a árvore vai crescendo


Como vamos utilizar a ferramenta VisuAlg para implementação da árvore, não vamos poder utilizar ponteiro, com isso, utilizaremos como estratégia a alocação estática de memória.

Na alocação estática de memória é utilizado um vetor para guardar os dados


Para saber o filho da esquerda ou da direita utilizamos a seguinte operação:

filho esq=2*pai (Filho da esquerda é igual a pai vezes dois)

filho dir=2*pai+1 (Filho da direita é igual a pai vezes dois mais um)

Utilizamos desta forma devido o nosso vetor iniciar com 1 (um), se iniciasse com 0 (zero) ficaria desta forma:

filho esq=2*pai+1 (Filho da esquerda é igual a pai vezes dois mais um )

filho dir=2*pai+2 (Filho da direita é igual a pai vezes dois mais dois)

É uma implementação interessante quando a árvore é completa, pois ocupa bem os espaços, quando a árvore possui um lado maior que o outro, o vetor fica com diversos locais vagos, tendo desperdício de memória.

Exemplo de alocação estática sequencial



Para representar a árvore binária da imagem anterior, o vetor ficaria desta forma:



Então, vamos ver com fica o código de uma árvore binária com inclusão, busca, exclusão e percurso no VisuAlg


 Algoritmo "arvore_binaria"  
 // Descrição  : implentação de uma árvore binária  
 // Autor(a)  : Cléuber José  
 // Data atual : 9/1/2022  
 Const  
   TAM_VETOR=10  
 Var  
 // Seção de Declarações das variáveis   
   vet :vetor[1..TAM_VETOR] de inteiro  
   i,aux, elemento, opcao: inteiro  
 procedimento adicionar()  
 inicio  
   limpatela  
   repita  
    escreval("=========Adicinar elemento=====")  
    escreva("Informe o elemento, 0 (zero) para sair:")  
    leia(elemento)  
    se elemento<>0 entao  
      adicionar_com_posicao(1,elemento)  
      mostrar_vetor()  
    fimse  
   ate elemento=0 faca  
 fimprocedimento  
 procedimento adicionar_com_posicao(posicao, elemento: inteiro)  
 inicio  
   se elemento=vet[posicao] entao  
     escreval("Elemento já adiconado anteriormente")  
   senao  
     se vet[posicao]=0 entao  
      vet[posicao]<-elemento  
      escreval("Elemento adicionado com sucesso")  
     senao  
      se elemento <vet[posicao] entao  
        aux<-2*posicao  
        se aux>TAM_VETOR entao  
         escreval("Vetor já está cheio")  
        senao  
         adicionar_com_posicao(aux,elemento)  
        fimse  
      senao  
        aux<-2*posicao+1  
        se aux>TAM_VETOR entao  
         escreval("Vetor já está cheio")  
        senao  
         adicionar_com_posicao(aux,elemento)  
        fimse  
      fimse  
     fimse  
   fimse  
 fimprocedimento  
 procedimento buscar()  
 inicio  
   limpatela  
   repita  
    escreval("============Buscar Elemento=======")  
    escreva("Informe o elemento, 0 (zero) para sair:")  
    leia(elemento)  
    se elemento<>0 entao  
      aux<- buscar_com_posicao(1,elemento)  
      se aux<>0 entao  
       escreval("Elemento encontrato na posição: ",aux)  
      senao  
       escreval("Elemento não encontrado")  
      fimse  
      mostrar_vetor()  
    fimse  
   ate elemento=0 faca  
 fimprocedimento  
 funcao buscar_com_posicao(posicao, elemento:inteiro): inteiro  
 inicio  
   se vet[posicao]=0 entao  
    retorne 0  
   senao  
    se vet[posicao]=elemento entao  
      retorne posicao  
    senao  
      se elemento< vet[posicao] entao  
       aux <-posicao*2  
       se aux>TAM_VETOR entao  
         retorne 0  
       senao  
          retorne buscar_com_posicao(aux,elemento)  
       fimse  
      senao  
       aux<-posicao*2+1  
       se aux> TAM_VETOR entao  
         retorne 0  
       senao  
         retorne buscar_com_posicao(aux,elemento)  
       fimse  
      fimse  
    fimse  
   fimse  
 fimfuncao  
 procedimento remover()  
 inicio  
   limpatela  
   repita  
    escreval("============Remover Elemento=======")  
    escreva("Informe o elemento, 0 (zero) para sair:")  
    leia(elemento)  
    se elemento<>0 entao  
      aux<-buscar_com_posicao(1,elemento)  
      se aux=0 entao  
       escreval("Elemento não encontrado!")  
      senao  
       remover_com_posicao(aux)  
       escreval("Elemento excluído com sucesso")  
      fimse  
      mostrar_vetor()  
    fimse  
   ate elemento=0 faca  
 fimprocedimento  
 procedimento remover_com_posicao(posicao:inteiro)  
 var  
   filho_esquerda, filho_direita, qtde_filho:inteiro  
 inicio  
   filho_esquerda<-posicao*2  
   filho_direita<-posicao*2+1  
   se filho_esquerda> TAM_VETOR entao  
     filho_esquerda<-0  
   senao  
     se vet[filho_esquerda]=0 entao  
       filho_esquerda<-0  
     senao  
       qtde_filho<-qtde_filho+1  
     fimse  
   fimse  
   se filho_direita> TAM_VETOR entao  
     filho_direita<-0  
   senao  
     se vet[filho_direita]=0 entao  
       filho_direita<-0  
     senao  
       qtde_filho<-qtde_filho+1  
     fimse  
   fimse  
   se qtde_filho=0 entao  
    vet[posicao]<-0  
   senao  
    se qtde_filho=1 entao  
      se filho_esquerda>0 entao  
       vet[posicao]<- vet[filho_esquerda]  
       arrastar_arvore(filho_esquerda,posicao)  
      senao  
       vet[posicao]<- vet[filho_direita]  
       arrastar_arvore(filho_direita, posicao)  
      fimse  
    senao  
      elemento<-minimo_com_posicao(filho_direita)  
      aux<-buscar_com_posicao(filho_direita, elemento)  
      vet[posicao]<-vet[aux]  
      remover_com_posicao(aux)  
    fimse  
   fimse  
 fimprocedimento  
 procedimento arrastar_arvore(posicao_anterior, posicao_atual:inteiro)  
 inicio  
   vet[posicao_anterior]<-0  
   aux<-posicao_anterior*2  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      vet[posicao_atual*2]<-vet[aux]  
      arrastar_arvore(aux, posicao_atual*2)  
    fimse  
   fimse  
   aux<-posicao_anterior*2+1  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      vet[posicao_atual*2+1]<-vet[aux]  
      arrastar_arvore(aux, posicao_atual*2+1]  
    fimse  
   fimse  
 fimprocedimento  
 procedimento pre_ordem()  
 inicio  
   escreval("============Pré Ordem=======")  
   mostrar_vetor()  
   escreval("")  
   escreva("Sequência: ")  
   pre_ordem_com_posicao(1)  
   escreval()  
   repita  
    escreva("Informe 0 (zero) para sair: ")  
    leia(aux)  
   ate aux=0 faca  
 fimprocedimento  
 procedimento pre_ordem_com_posicao(posicao:inteiro)  
 inicio  
   escreva(vet[posicao]," ")  
   aux<-posicao*2  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      pre_ordem_com_posicao(aux)  
    fimse  
   fimse  
   aux<-posicao*2+1  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      pre_ordem_com_posicao(aux)  
    fimse  
   fimse  
 fimprocedimento  
 procedimento em_ordem()  
 inicio  
   escreval("============Em-Ordem=======")  
   mostrar_vetor()  
   escreval("")  
   escreva("Sequência: ")  
   em_ordem_com_posicao(1)  
   escreval()  
   repita  
    escreva("Informe 0 (zero) para sair: ")  
    leia(aux)  
   ate aux=0 faca  
 fimprocedimento  
 procedimento em_ordem_com_posicao(posicao:inteiro)  
 inicio  
   aux<-posicao*2  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      em_ordem_com_posicao(aux)  
    fimse  
   fimse  
   escreva(vet[posicao]," ")  
   aux<-posicao*2+1  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      em_ordem_com_posicao(aux)  
    fimse  
   fimse  
 fimprocedimento  
 procedimento pos_ordem()  
 inicio  
   escreval("============Pós-Ordem=======")  
   mostrar_vetor()  
   escreval("")  
   escreva("Sequência: ")  
   pos_ordem_com_posicao(1)  
   escreval()  
   repita  
    escreva("Informe 0 (zero) para sair: ")  
    leia(aux)  
   ate aux=0 faca  
 fimprocedimento  
 procedimento pos_ordem_com_posicao(posicao:inteiro)  
 inicio  
   aux<-posicao*2  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      pos_ordem_com_posicao(aux)  
    fimse  
   fimse  
   aux<-posicao*2+1  
   se aux<=TAM_VETOR entao  
    se vet[aux]<>0 entao  
      pos_ordem_com_posicao(aux)  
    fimse  
   fimse  
   escreva(vet[posicao]," ")  
 fimprocedimento  
 procedimento menu_principal()  
 inicio  
   repita  
    limpatela  
    escreval("=======Árvore binária===========")  
    escreval("---Informe uma opção----")  
    escreval("1 - Adicionar elemento")  
    escreval("2 - Buscar elemento")  
    escreval("3 - Mínimo")  
    escreval("4 - Máximo")  
    escreval("5 - Remover")  
    escreval("6 - Pré-ordem")  
    escreval("7 - Em-ordem")  
    escreval("8 - Pós-ordem")  
    escreval("0 - Sair")  
    escreva("Informe: ")  
    leia(opcao)  
    escolha (opcao)  
    caso 1  
     adicionar()  
    caso 2  
     buscar()  
    caso 3  
     minimo()  
    caso 4  
     maximo()  
    caso 5  
     remover()  
    caso 6  
     pre_ordem()  
    caso 7  
     em_ordem()  
    caso 8  
     pos_ordem()  
    fimescolha  
  ate opcao=0 faca  
 fimprocedimento  
 procedimento mostrar_vetor()  
 inicio  
   escreval("")  
   escreval("--------Dados do Vetor----")  
   para i de 1 ate TAM_VETOR faca  
    escreva(vet[i], " ")  
  fimpara  
  escreval("")  
  escreval("")  
 fimprocedimento  
 funcao vazio():logico  
 inicio  
  retorne vet[1]=0  
 fimfuncao  
 procedimento minimo()  
 inicio  
   limpatela  
   escreval("-------Menor Elemento da Árvore---")  
   se vazio() entao  
    escreval("Árvore vazia")  
   senao  
    aux <- minimo_com_posicao(1)  
    escreval("Menor elemento da árvore é: ",aux )  
   fimse  
   repita  
    escreva("Informe 0 (zero) para sair: ")  
    leia(aux)  
   ate aux=0 faca  
 fimprocedimento  
 funcao minimo_com_posicao(posicao: inteiro):inteiro  
 inicio  
   aux<-posicao*2  
   se (aux> TAM_VETOR) entao  
    retorne vet[posicao]  
   senao  
    se vet[aux]=0 entao  
      retorne vet[posicao]  
    senao  
      se vet[aux]<vet[posicao] entao  
       retorne minimo_com_posicao(aux)  
      fimse  
    fimse  
   fimse  
 fimfuncao  
 procedimento maximo()  
 inicio  
   limpatela  
   escreval("-------Maior Elemento da Árvore---")  
   se vazio() entao  
    escreval("Árvore vazia")  
   senao  
    aux <- maximo_com_posicao(1)  
    escreval("Maior elemento da árvore é: ",aux )  
   fimse  
   repita  
    escreva("Informe 0 (zero) para sair: ")  
    leia(aux)  
   ate aux=0 faca  
 fimprocedimento  
 funcao maximo_com_posicao(posicao: inteiro):inteiro  
 inicio  
   aux<-posicao*2+1  
   se (aux> TAM_VETOR) entao  
    retorne vet[posicao]  
   senao  
    se vet[aux]=0 entao  
      retorne vet[posicao]  
    senao  
      se vet[aux]>vet[posicao] entao  
       retorne maximo_com_posicao(aux)  
      fimse  
    fimse  
   fimse  
 fimfuncao  
 Inicio  
 // Seção de Comandos, procedimento, funções, operadores, etc...   
   menu_principal()  
 Fimalgoritmo  



terça-feira, 4 de janeiro de 2022

Estruturas de Dados Avançadas - Árvore Binária

Existem vários tipos de árvores, no entanto, as árvores binárias são as mais utilizadas na computação, porque quando ordenadas, permitem que pesquisas, inclusões e exclusões de dados em sua estrutura sejam extremamente rápidas.

As árvores binárias possuem um nó superior também chamado de raiz que aponta para outros nós, chamados de nós filhos, que podem ser pais de outros nós.

Pode ser caracterizada por

* Não ter elemento algum (Árvore Vazia)

* Ter um elemento distinto, denominado raiz, com dois filhos, denominados subárvore esquerda e subárvore direita.


Inserção de elemento

* Se ainda não há nó raiz, então o novo elemento será o próprio nó raiz

* Se há nó raiz, então compare o novo elemento com o nó raiz

** caso o novo elemento seja menor que o nó raiz, ele vai ser inserido na subárvore da esquerda

** caso o novo elemento seja maior que o nó raiz, ele será inserido na subárvore da direita

Observação: se a subárvore já tiver um valor, a regra acima será usada em recursividade


Para a gente entender um pouquinho melhor como funciona isso, vamos para o seguinte exemplo

Vamos fazer a inserção de seis elementos:  30, 15, 50, 25, 10, 31.










Remoção de elemento

* Se tiver somente um nó, ele será apagado


* se for apagar um nó folha, também não haverá problema, só excluí-lo



* se for deletar um nó que tenha apenas um filho, deleta o nó e o substitui pelo seu filho, trazendo toda a subárvore do filho





* se for deletar um nó que tenha dois filhos

** O nó deletado só pode ser substituído pelo maior nó da subárvore da esquerda ou o menor da subárvore da direita

Observação: utilizar isso recursivamente





Percursos em árvore


São algoritmos que percorrem caminhos pré-definidos em uma estrutura de árvore, cobrindo todos os nós.

Eles tem nomes e aplicações específicas

Há percursos de Pré-ordem, Pós-ordem, Em-ordem, Percurso em largura, Percurso em profundidade e Caminho Euleriano, mas aqui, vamos focar somente nos três primeiros


Pré-ordem

1. Executa a operação do algoritmo primeiro no nó atual

2. Se tem filho à esquerda: executa o pré-ordem no filho da esquerda

3. Se tem filho a direita: executa o pré-ordem no filho da direita

Sequência em pré-ordem: 30, 15, 10, 25 e 50


Em-ordem

1. Se tem filho a esquerda: executa o em ordem no filho da esquerda

2. Executa a operação do algoritmo no nó atual

3. Se tem filho a direita: executa o em-ordem no filho da direita

Sequência em em-ordem: 10, 15, 25, 30 e 50


Pós-ordem

1. Se tem filho à esquerda: executa o pós ordem no filho da esquerda

2. Se tem filho à direita: executa o pós ordem no filho da direita

3. Executa a operarão do algoritmo no nó atual

Sequência em pós-ordem: 10, 25, 15, 50 e 30


Com isso a gente fez uma introdução a árvore binária, no próximo post, vamos ver isso codificado, utilizando a ferramenta VisuAlg

Até lá


terça-feira, 28 de dezembro de 2021

Estruturas de Dados Avançadas - Árvore

 A estrutura de árvore tem diversas aplicações e pode ser usadas em pastas de um sistema operacional, interfaces gráficas, bancos de dados entre outros.

É diferente de vetor, que tem os dados em uma sequência, na árvore os dados ficam de forma hierárquica.

Uma árvore é um conjunto de elementos que armazenam informações chamados nodos ou nó, consistindo de um nós chamado raiz, abaixo do qual estão as subárvores (ramos ou filhos) que compõem a árvore. O elemento que não possui subárvore é conhecido como nós externos ou folha.

Costumamos representar uma árvore de forma invertida, com a raiz iniciando por cima

O número de subárvore de cada nó é chamado de GRAU desse nó

Os nós de grau 0 são chamados de nós externos ou folhas 

Nós abaixo de um determinado nó são seus descendentes, no exemplo abaixo os nós 2 e 12 são descentes do nó 8.

Descentes do 15: todos os outros nós.


O nível da árvore inicia pela raiz, ela tem o nível 0


A altura de um nó é o comprimento mais longo entre ele e uma folha


Profundidade de um nó é a distância percorrida da raiz a esse nó


Representação

Uma árvore pode ser representada pelas formas hierárquica, diagrama de inclusão, diagrama de barras, por aninhamentonumeração por níveis.

A hierárquica é parecida com um organograma de uma empresa, linhas unem dois nodos e indicam o relacionamento lógico entre eles. Tradicionalmente desenha-se a raiz na parte superior e todos os nodos subordinados na parte inferior, mas o contrário também é possível.


Diagrama de inclusão, um círculo representa cada nodo e seus nodos descendentes são inseridos dentro do círculo de seus pais. Também conhecida como diagrama de Venn, é muito utilizada na representação de conjuntos.



Em um diagrama de barras, linhas são usadas para mostrar a hierarquia dos nodos. A raiz possui a linha de maior tamanho e os nodos irmãos possuem linhas de tamanhos iguais. Método bastante utilizado na criação de índices de livros.


Usando numeração por níveis o nodo raiz recebe o número um e todos os nodos seguintes recebem uma numeração sequencial, sempre antecedidos pela numeração de seus nodos superiores.


Na representação por aninhamento, também conhecida por "representação por parênteses aninhados", a sucessão de parênteses reproduz as relações entre os nodos, aninhando um nodo filho ao seu pai.




Com isso,  temos uma visão geral do conceito de árvore, no próximo post iremos ver como funciona uma árvore binária.

Até a próxima






segunda-feira, 20 de dezembro de 2021

Arvore de Natal com VisuAlg

O Natal é uma data muito especial para reunir a família e celebrar a vida e uma data especial dessa, não pode passar batida, vamos criar um algoritmo em homenagem ao Natal.

Vamos fazer uma árvore de natal utilizando a ferramenta VisuAlg

 Algoritmo "arvore"  
 // Descrição  :Árvore de Natal  
 // Autor(a)  : Cléuber José  
 // Data atual : 23/12/2021  
 Var  
 // Seção de Declarações das variáveis   
   i,j,inicia, qtde, tam:inteiro  
 Inicio  
 // Seção de Comandos, procedimento, funções, operadores, etc...   
   escreval("==========Árvore de Natal========")  
   escreva("Informe o tamanho da árvore: ")  
   leia(tam)  
   inicia<-tam  
   qtde<-1  
   escreval  
   escreval  
   para i de 1 ate tam faca  
    escreva(" ")  
   fimpara  
   escreval(" *")  
   para i de 1 ate tam faca  
    para j de 1 ate inicia faca  
      escreva(" ")  
    fimpara  
    inicia<-inicia-1  
    escreva("/")  
    para j de 1 ate qtde faca  
      escreva("*")  
    fimpara  
    qtde<-qtde+2  
    escreval("\")  
   fimpara  
   para i de 1 ate tam faca  
    escreva(" ")  
   fimpara  
   escreval("|_|")  
 Fimalgoritmo  

Eu desejo a você, um Feliz Natal e um próspero Ano Novo!






sábado, 1 de junho de 2019

Programação de Computador

A programação de computadores é algo natural. Tão natural como a programação de um encontro, de um evento, de uma viagem, ou, até mesmo, da vida.
Trata-se de instruções padronizadas para o funcionamento de um computador, de acordo com o objetivo e a necessidade do programador.
Desde o seu princípio, a programação tem como objetivo facilitar a execução das tarefas, realizando cálculos complexos milhares de vezes mais rápido que o ser humano. A premissa é básica: se é possível identificar um padrão nessa tarefa, ela pode ser
programada.
O primeiro computador conhecido, A Máquina de Anticítera, foi um computador analógico datado de 87 a.c. que estava programado com os padrões astronômicos do Sol, da Lua e de 5 (cinco) planetas, sendo possível prever as posições astronômicas e eclipses como função de calendário e astrologia.

A máquina de Anticítera
Réplica funcional da Máquina de Anticítera
Em 1837 foi descrita por Charles Babbage A Máquina Analítica, que incorporava uma unidade lógica matemática, fluxo de controle, loop e memória integrada.

Charles Babbage
Maquina analítica proposta por Babbage

Por diversos motivos, como políticos e financeiros, o modelo nunca foi construído, mesmo sendo base para os computadores modernos. Foi um protótipo à frente de seu tempo. A possibilidade de inserção de instruções para seu funcionamento era algo até então impensável. Os computadores eram analógicos e construídos com um propósito definido, como ocorre hoje com os circuítos elétricos.
Daí surgiu o primeiro algorítimo para ser processado por uma máquina, escrito por Ada Lovelace, que ficou conhecida como a primeira programadora da história.
Ada Augusta Byron King(Ada Lovelace)
Algoritmo criado por Ada Lovelace





A importância das mulheres para a programação não para por aí, pois durante a construção do ENIAC (Electronic Numerical Integrator and Computer), o primeiro computador digital eletrônico de grande escala, uma equipe composta por 80 (oitenta) mulheres fazia os cálculos manuais de equação diferencial para posterior realização  de cálculos de balística pelo ENIAC. Esse era o seu principal objetivo.
Quando o computador ficou pronto, 6 mulheres foram escolhidas para realizar a programação.
ENIAC com suas programadoras

Com o tempo o ENIAC foi ficando obsoleto, e novas máquinas foram surgindo. A programação de computador foi evoluindo até chegar às famosas linguagens de programação, Mas calma, esse é um assunto para um próximo post.

segunda-feira, 27 de janeiro de 2014

Lógica de Programação - Tópicos Preliminares (Final) - Expressões

Olá pessoal, vocês estão bem?

Na última parte falando sobre os Tópicos Preliminares veremos as expressões, que estão divididas em expressões aritméticas e lógicas e também veremos alguns exercícios de fixação.



Expressões Aritméticas

Denomina-se expressão aritmética onde as variáveis (ou constantes) são do tipo numérico (inteiro ou real) e seus operadores são aritméticos.
            Posso dizer que uma expressão aritmética é uma conta de matemática (equação).

            Operadores Aritméticos
            Os operadores aritméticos são os sinais (símbolos) utilizados para a realização das operações matemáticas
             Na linguagem “Portugol” é comum a utilização das palavras-chave pot e rad para descrever potenciação e radiciação.
             Outras operações que são muito uteis na programação são mod e div, onde mod descreve o resto da divisão e div o quociente da mesma.
Operador
Função
+
Adição
-
Subtração
*
Multiplicação
/
Divisão
Pot(x,y)
Potenciação
Rad(x)
Radiciação
mod
Resto da divisão
div
Quociente da divisão

  Na tabela temos pot(x,y) que significa que x está sendo elevado a y por exemplo pot(4,2) =16 e rad(16)=4
  Para quem está começando a se interessar por programação agora, é uma coisa bastante nova, mas também bem simples.
  Para o operador mod veremos o resto de uma divisão, por exemplo: Em uma divisão normal, 10/3 resultaria em 3,33333, utilizando mod  (10 mod 3) essa operação resultaria em 1 (resto da divisão).
  Para o operador div teremos o quociente da operação, por exemplo: Na mesma divisão anterior utilizando o div (10 div 3) teríamos  3. É como se ele não quebrasse o resultado, deixando-o sempre como inteiro.
  Prioridades
  Como em uma equação matemática, temos as prioridades de operadores para termos consistência e nossas operações, são elas:
Prioridade
Operadores
Parênteses
pot rad
* / div mod
+ -


    Expressões Lógicas

                Expressões lógicas são operações do tipo lógico onde se espera que o resultado seja somente verdadeiro ou falso.