Escolar Documentos
Profissional Documentos
Cultura Documentos
ISBN: 978-619-00-0636-7
Páginas: 420
Idioma: Búlgaro
Editora: Faber, Veliko Tarnovo
Sófia, 2017
Curso gratuito com videoaulas sobre "Fundamentos de programação com a linguagem C#"
Etiquetas: programação; programação de livros; livro de programação; um livro; livro grátis; grátis; livro eletrônico; livro
eletrônico; Java; Livro Java; livro Java; código do programa; livro Java; livro Java; Java; Livro básico de Java;
Noções básicas de programação Java; livro de programação Java; livro básico de programação; livro básico de
programação Java; programação de computadores; conceitos de programação; noções básicas de
programação; livro didático; autodidata; Introdução ao Java; Introdução Java; livro java; aulas de programação;
aulas de programação; aprender Java; tutoriais Java; tutoriais Java; aprender programação; como programar;
programador; programação prática; técnicas de programação; pensamento lógico; pensamento algorítmico; codificador;
codificador; codificação; codificação; habilidades de codificação; habilidades de programação; linguagem de programação;
linguagem de programação; noções básicas de programação; primeiros passos da programação; aulas; Código fonte;
Código fonte; Código aberto; Código fonte; Código aberto; compilador; compilador; depuração; depurador; Eclipse;
IntelliJ IDEA; IDE; ambiente de desenvolvimento; Java; JVM; JavaSE; dados; variáveis; operadores; expressões;
console; console; entrada do console; saída do console; Aplicação de console; Construções condicionais; se
declaração; se construir; se; if-else; switch-caixa; ciclos; enquanto; fazer enquanto; loop for; laço foreach; laços
aninhados; métodos; métodos de chamada; parâmetros; tarefas de programação, resolução de problemas; tarefas e
decisões; escrever código; teste de código; exercícios; tarefas; decisões; instruções de programação; tarefas
de programação; exercícios de programação; bom programador; programador pessoal; Nakov; Nakov; Svetlin
Nakov; Svetlin Nakov; universidade de software; SoftUni; academia de software; ISBN 978-619-00-0636-7; ISBN9786
Conteúdo curto
Breve Conteúdo ....................................... ................................................ .. ............... 3
Conteúdo .................................. ................................................ ..... .........................................
7 Prefácio ..... .......................................... ....... ......................................... ......... ................... 11
Capítulo 1. Começando na Programação........................... ....................................... 25
Capítulo 2.1. Cálculos simples com números.............................................. ..... ...............................
69 Capítulo 2.2. Cálculos simples com números - problemas de exame .............................. .........
99 Capítulo 3.1. Verificações simples ..................................... .....................................................
117
Capítulo 3.2. Verificações simples - tarefas de exame .............................. ..... 141 Capítulo4.1.
Verificações mais complexas ....................................... .... ......................................... 155
Capítulo 4.2. Verificações mais complexas - tarefas de exame ........................... .............. 175
Capítulo 5.1. Repetições (ciclos) .............................................. ................................................
197
Capítulo 5.2. Repetições (ciclos) - tarefas de exame .................................. .. ............ 225
Capítulo 6.1. Loops aninhados .......................................... .....................................................
243 Capítulo 6.2. Ciclos aninhados - tarefas de exame .............................. ...................... 259
Capítulo 7.1. Ciclos mais complexos ....................................... .... .................................................. ...
273 Capítulo 7.2. Ciclos mais complexos - tarefas de exame ....................................... ................
293 Capítulo 8.1. Preparação para exame prático - parte I ........................................ ....... 305
Capítulo 8.2. Preparação para exame prático - parte II ........................................ ...... 329
Capítulo 9.1. Tarefas do Campeão - Parte I ............................... .............................. 345
Capítulo 9.2. Tarefas do Campeão - Parte II.................................. ..................... 359 Capítulo
10. Métodos ........... ..................................................... . .................................................. 375
Capítulo 11. Truques e hacks ....................................... ................................................. 401
Conclusão ......................................................... .. ................................................ ......................... 413
Machine Translated by Google
Machine Translated by Google
Noções
básicas de
programação Java
ISBN: 978-619-00-0636-7
Sófia, 2017
Machine Translated by Google
Este livro é distribuído gratuitamente sob a licença aberta CC-BY-SA, que especifica os
seguintes direitos e obrigações:
Todas as marcas registradas usadas neste livro são de propriedade de seus respectivos
proprietários.
Código-fonte: https://github.com/SoftUni/Programming-Basics-Book-Java-BG
Machine Translated by Google
Contente
Breve Conteúdo ....................................... ................................................ .. ............... 3
Conteúdo .................................. ................................................ ..... ......................................... 7
Prefácio ..... .......................................... ....... ......................................... ......... ................... 11
Para quem é este livro? ................................................ .. ............................................. .... ......................11
Por que escolhemos a linguagem Java?.............. . ............................................. ... .........................................
Programação aprende-se escrevendo muito, não lendo!.......................................... . ......................12
Sobre a Universidade de Software (SoftUni).............. ................................................ .. ......................13
Como se tornar um programador? ................................................ .. ............................................. .... ..............
O livro para ajudar os professores............................ .. ............................................. .... ...........................20
A história deste livro........ ................................................ ..... ............................................21 Site
oficial do livro ........................................ ......................................... ........ .............22 Fórum para suas
perguntas........................... ......................................... ............ ................................22 Página oficial
do livro no Facebook......... ......................................... ........ .............................23 Licença e
Distribuição........ ....... ......................................... ......... ........................................23 Relatando
erros .. ......................................... ............ ..................................... .............. ................23 Boa
leitura!............. ............... ................................ ................. ............................. ................... ....23
Capítulo 1. Iniciando na Programação............................ ............................. .... 25
Vídeo ................................................. .. ................................................ ................................................ .. ...
O que significa "programar"?.............................. ................................................ ..... .....25 Como
escrever um programa de console?........................... . ............................................. ... ............29
Exemplo: criando um programa de console "Hello Java"............ .........................35 Erros típicos
em programas Java............ ......................................... ......... ................................39 O que
aprendemos com este capítulo? ........ ....................................... .......... .......................................40
Exercícios: primeiro passos na codificação ....................................... ........................................40
Console, aplicações gráficas e web ..................................... .............. .................................46
Capítulo 2.1. Cálculos simples com números.............................................. ..... ............................... 69
Vídeo ............... ..................................................... ..................................................... ..............................69
Console do sistema ....... . ................................................ . ............................................. ... ...........69
Lendo números do console ....................... ................................................ ..... ................................70
Cálculos na programação ....... ..... .......................................... ....... .........................................72
Tipos de dados e variáveis.... ............................................. ... ................................................ ..... ..........73
Lendo um número fracionário do console........................... ...................................................... .........73
Lendo e imprimindo texto............................... ....................................... .......... .........................74
Unindo texto e números........ ......... ......................................... ........... ......................................... 74
Operações aritméticas........ ......................................... ......... ......................................... ........... ...........75
Unir texto e número ....................... ..................................... .............. .........................77 Expressões
numéricas ........ .............. ................................ ................ ................................ .................. ...........78
O que aprendemos com este capítulo?........................... ................................ .................. .........................80
Exercícios: cálculos simples .................. ............................. .................... ......................... 81 Capítulo
2.2. Cálculos simples com números - problemas de exame .............................. ......... 99
Lendo números do console ....................................... . ................................................ . .............99
Saída de texto usando especificadores de formato (especificadores de formato) .............. .. ...99
Operadores aritméticos........................................... ................................................ .. .........................99
Concatenação........... ................................................ ..... .......................................... ....... ............100
tarefas de exame............................ ......................................... ......... ....................................100
Tarefa: Estudo Salão ........................ ........... ..................................... ............. ......................100
Machine Translated by Google
Conteúdo 9
O que aprendemos com este capítulo? ...................................... ...... .......................................... .... ............206
Exercícios: repetições (ciclos) ........................... .... .................................................. .. ....................207
Exercícios: Aplicações Gráficas e Web ..................... .. ................................................ ..........213
Capítulo 5.2. Repetições (ciclos) - tarefas de exame .................................. .. ............ 225 Tarefas do
exame........................... ................................................ .. ............................................. ..225 Tarefa :
Histograma ....................................... .... ...................................................... .............................225
Missão: Clever Lily ........... .... ...................................................... ......................................... ........ ......230
Missão: Retorno ao Passado ....................... ......................................... ......... .............233 Missão:
Hospital............................ ......................................... ........... ..................................... ............. 235
Problema: divisão sem resto ....................................... ..................................... .............. .............238
Tarefa: Logística........................... ................................... ............... .................................239 Capítulo
6.1. Loops aninhados .......................................... ..................................................... 243
Vídeo .............................................. . ............................................. ... ................................................ ..... ..243
Loops aninhados ............................... ..... .......................................... ....... .........................................245
Desenhando figuras mais complexas ....... ......................................... ......... ........................................251
O que aprendemos com este capítulo? ....................................... ......................................... ........... ..........258
Capítulo 6.2. Ciclos aninhados - tarefas de exame .............................. ...................... 259 Tarefas do
exame............... ........ .......................................... ...... .......................................... ........259 Tarefa:
desenhar uma fortaleza .............................. .... .................................................. .. .......................259
Tarefa: Borboleta ............... . ................................................ . ............................................. ... .........262
Tarefa: Sinal de "Pare" .................. .. ............................................. .... .........................................264
Tarefa: seta .... ............................................. ... ................................................ ..... .............................266
Missão: Machado .......... ..... .......................................... ....... ......................................... ......... ................269
Capítulo 7.1. Ciclos mais complexos ....................................... .... .................................................. ... 273
Vídeo .............................................. ...... .......................................... .... .................................................. .. .....27
Ciclos de passo ............................... ........ .......................................... ...... .........................................273
Loop while. ..................................................... ..................................................... .....................................276
Máximo Divisor Comum (MDC) .... . ............................................. ... ................................................ 277
Algoritmo de Euclides .. ...................................................... ......................................... ........ ...................278
Loop Do-While ..................... ....................................... .......... ......................................... ............ ........279
Laços infinitos e a instrução break........................... ......................................... ........... ......281 Loops
aninhados e a instrução break ....................................... ......................................... ............ .......284
Manipulando dados inválidos: try-catch ....................... .......... ..................................... .............. .........286
Tarefas com loops ....................... .............. ................................ ................ ................................ .............287
O que aprendemos deste capítulo? .......................... .............. ................................ ................ ..........292
Capítulo 7.2. Ciclos mais complexos - tarefas de exame ....................................... ............... 293 Tarefas
de exame............................ . ............................................. ... ................................................ ..... .293
Tarefa: Gerador de senha fictício ....................................... ......................................... ........ ....293
Tarefa: números mágicos............................... ....................................... .......... .........................295
Problema: número de parada........ ......... ......................................... ........... ........................................299
Problema : números especiais ....................................... ..................................... .............. ...................300
Tarefa: números ............. .............. ................................ ................ ................................ .................. .......302
Capítulo 8.1. Preparação para exame prático - parte I ........................................ ....... 305
Vídeo ................................................. .. ................................................ ................................................ .. ...305
Exame prático de "Fundamentos de Programação" .................................. .. ......................305 Sistema
de Julgamento Online (Juiz) ............... ... ................................................ ..... ......................305
Machine Translated by Google
Prefácio
O livro "Programming Basics" é um livro-texto oficial do curso "Programming Basics" de
programação para iniciantes da Software University (SoftUni): https://softuni.bg/courses/
programming-basics. Ele apresenta aos leitores habilidades básicas de codificação,
trabalhando com um ambiente de desenvolvimento (IDE), usando variáveis e dados,
operadores e expressões, trabalhando com o console (lendo dados de entrada e
imprimindo resultados), usando construções condicionais (if, if- else , switch -case),
loops (for, while, do-while) e trabalhar com métodos (declarar e chamar métodos, passar
parâmetros e retornar um valor). A linguagem de programação Java e o ambiente de
desenvolvimento IntelliJ IDEA são usados. O material do curso abordado fornece uma
preparação básica para um estudo mais aprofundado da programação e prepara os
leitores para o vestibular do SoftUni.
O livro também é usado como um livro não oficial para cursos de programação escolar
em escolas profissionais que estudam as profissões de "Programador", "Programador
aplicado" e "Programador de sistema", bem como um livro adicional em cursos de
programação elementares em escolas secundárias, escolas secundárias perfiladas e
matemáticas, para turmas com o perfil "informática e tecnologias da informação".
Prefácio 13
Se alguém pensa que vai ler um livro e aprender a programar sem escrever código e resolver bem os problemas,
com certeza está enganado. a programação
aprenda fazendo muita e muita prática, escrevendo código todos os dias e resolvendo centenas,
mesmo milhares de tarefas, com seriedade e persistência, durante anos.
Você tem que resolver problemas difíceis, bagunçar, se corrigir, buscar soluções e informações na internet, tentar,
experimentar, encontrar soluções melhores, se acostumar com o código, a sintaxe, a linguagem de programação,
o ambiente de desenvolvimento, com encontrar erros e depuração de código quebrado, com raciocínio sobre
tarefas, com pensamento algorítmico, com quebra de problemas em etapas e implementação de cada etapa, para
ganhar experiência e melhorar suas habilidades a cada dia, porque aprender a escrever código é apenas o
primeiro passo para o profissão de "engenheiro de software". Você tem muito a aprender, muito mesmo!
No mínimo, aconselhamos o leitor a experimentar todos os exemplos do livro, brincar com eles, alterá-los e testá-
los. Ainda mais importante do que os exemplos, no entanto, são os problemas práticos porque desenvolvem as
habilidades práticas do programa.
erro.
Resolva todos os problemas do livro, porque programação se aprende fazendo! Os problemas após cada tópico
são cuidadosamente selecionados para cobrir em profundidade o material de estudo abordado, e o objetivo de
resolver todos os problemas de todos os tópicos abordados é fornecer habilidades abrangentes de codificação de
nível básico (que também é o objetivo deste livro). . Nos cursos da SoftUni, não é por acaso que enfatizamos a
prática e a resolução de problemas, e na maioria dos cursos a codificação presencial é mais de 70% de todo o
curso.
Resolva todos os problemas de exercícios do livro. Caso contrário, você não aprenderá
nada! A programação é aprendida escrevendo muito código e resolvendo milhares de
problemas!
A Software University oferece educação de qualidade, oportunidades de carreira, trabalho e bacharelado para
programadores, engenheiros de software e profissionais de TI. A SoftUni é extremamente bem-sucedida na
construção de um relacionamento duradouro entre educação e indústria, cooperando com centenas de empresas
de software, fornecendo empregos e estágios para seus alunos, fornecendo serviços de qualidade
Machine Translated by Google
especialistas para a indústria de software e atende diretamente às necessidades dos empregadores através do
processo de aprendizagem.
Este livro de programação acompanha os cursos gratuitos de programação para iniciantes da SoftUni e serve
como um auxiliar de aprendizagem adicional para auxiliar no processo de aprendizagem.
pontos.
Todos os problemas deste livro estão disponíveis para teste no juiz SoftUni, e recomendamos fortemente que
você os teste após resolvê-los para saber se está faltando alguma coisa e se sua solução realmente funciona
corretamente conforme necessário
a natureza da tarefa.
• Para cada tarefa, o sistema de juízes mantém o maior resultado alcançado. Se você carregar
uma solução com código errado ou um resultado inferior ao anterior
enviado, o sistema não deduzirá pontos de você.
• A saída do seu programa é comparada pelo sistema estritamente com o resultado esperado.
Qualquer caractere extra, falta de vírgula ou espaço pode levar a 0 pontos no teste
correspondente. A saída que
Machine Translated by Google
Prefácio 15
O juiz que o sistema espera é descrito na condição de cada tarefa e nada mais deve
ser adicionado a ele.
Exemplo: se a saída exigir que um número seja impresso (por exemplo, 25), não envie
mensagens descritivas como O resultado é: 25, mas imprima exatamente o que é
requer, ou seja, apenas o número.
O sistema de juízes SoftUni está disponível a qualquer momento em seu site: https://judge.
softuni.bg.
• Para fazer login, use sua autenticação no site da SoftUni: https://softuni.bg.
livros.
O livro (e os cursos nele baseados) são apenas o começo de um longo e sério estudo, no caminho da programação
profissional. Se você não dominar o material de estudo deste livro com perfeição, não há como se tornar um
programador. Você carecerá de fundamentos e será cada vez mais difícil para você seguir em frente. Portanto, preste
bastante atenção aos fundamentos da programação: resolva problemas difíceis e escreva muito código por meses até
aprender a resolver todos os problemas deste livro com facilidade. Então siga em frente. Observamos especialmente
que a linguagem de programação não é essencial para a capacidade de codificar. Ou você pode codificar ou não. Se
você pode codificar em C#, aprenderá facilmente a codificar em Java, C++ e qualquer outra linguagem. É por isso
habilidades de codificação são estudadas com muita seriedade em cursos introdutórios para
engenheiros de software da SoftUni (ver currículo), e todo livro de programação para iniciantes completos começa com
eles, inclusive o nosso.
Prefácio 17
Este livro desenvolve um nível inicial de pensamento algorítmico, mas não é suficiente para torná-lo um bom
programador. Para se tornar proficiente na profissão, você precisará adicionar raciocínio lógico e habilidades de
resolução de problemas além do escopo deste livro, como trabalhar com estruturas de dados (arrays, listas,
matrizes, tabelas hash, estruturas de árvore) e algoritmos básicos (pesquisa , ordenação, travessia de árvore,
recursão e outros). As habilidades de pensamento algorítmico são desenvolvidas seriamente nos cursos
introdutórios para engenheiros de software da SoftUni (veja o currículo), bem como nos cursos especializados em
estruturas
de dados e algoritmos.
Como você pode imaginar, uma linguagem de programação é irrelevante para o desenvolvimento do pensamento
algorítmico. Pensar logicamente é universal, não se trata apenas de programação. Precisamente por causa da
lógica altamente desenvolvida
pensamento é considerado que os programadores são bastante inteligentes e que uma pessoa simples não pode
tornar-se um programador.
Prefácio 19
Para começar a trabalhar como programador, geralmente basta apenas conhecimentos básicos nas áreas listadas
acima, e o aprofundamento ocorre no local de trabalho de acordo com as tecnologias e ferramentas de
desenvolvimento utilizadas na respectiva empresa e equipe.
• Para os 75% restantes das habilidades, o idioma não importa e essas habilidades são
sustentáveis ao longo do tempo e transferíveis entre diferentes idiomas e tecnologias.
Aqui estão algumas linguagens e tecnologias comumente usadas (pilhas de desenvolvimento
de software) que as empresas de software estão procurando (atual em maio de 2017):
• C# + OOP + FP + classes .NET + banco de dados SQL Server + Entity Framework (EF) +
ASP.NET MVC + HTTP + HTML + CSS + JS + DOM + jQuery
• Java + Java API classes + OOP + FP + bancos de dados + MySQL + HTTP + programação
web + HTML + CSS + JS + DOM + jQuery + JSP/Servlets + Spring MVC ou Java EE /
JSF
• PHP + OOP + bancos de dados + MySQL + HTTP + programação web + HTML + CSS +
JS + DOM + jQuery + Laravel / Symfony / outro framework MVC para PHP •
JavaScript (JS ) + OOP + FP + bancos de dados + MongoDB ou MySQL + HTTP +
programação web + HTML + CSS + JS + DOM + jQuery + Node.js + Express + Angular
ou React • Python +
OOP + FP + bancos de dados + MongoDB ou MySQL + HTTP + web
programação + HTML + CSS + JS + DOM + jQuery + Django
• C++ + OOP + STL + Boost + desenvolvimento nativo + bancos de dados + HTTP + outros
línguas
• Swift + MacOS + iOS + Cocoa + Cocoa Touch + XCode + HTTP + REST + ÿÿÿÿÿ
línguas
Se as palavras listadas acima parecem assustadoras e absolutamente incompreensíveis para você, então você
está no início de sua carreira e tem mais anos para estudar até alcançar a profissão de "engenheiro de software".
Não se preocupe, todos
Machine Translated by Google
um programador passa por uma ou mais pilhas de tecnologia e precisa aprender um conjunto
de tecnologias interconectadas, mas no centro de tudo isso está a habilidade de escrever a
lógica do programa (para codificar), que é desenvolvida neste livro, e a habilidade de pensar
algoritmicamente (para resolver as tarefas do programa antecipadamente). Você não pode
fazer sem eles!
• Quanto mais idiomas e tecnologias você conhecer, mais rápido você aprenderá
novo e menos você sentirá diferença entre eles.
Prefácio 21
livro, você obtém conteúdo educacional de qualidade para ensinar na escola, em búlgaro, de acordo com
os requisitos da escola:
Tudo começa com os massivos cursos gratuitos de noções básicas de programação que acontecem em
todo o país desde 2014, quando foi lançada a iniciativa SoftUni. No início, esses cursos tinham um escopo
maior e incluíam mais teoria, mas em 2016, o Dr. Svetlin Nakov revisou completamente, atualizou,
simplificou e os orientou fortemente para a prática. Assim, o núcleo do conteúdo de aprendizagem deste
livro foi criado.
impulsiona este projeto de código aberto, inicialmente para criar um livro sobre os fundamentos da
programação com a linguagem C# e, posteriormente, com outras linguagens de programação. O presente
livro é quase uma tradução espelhada para Java de sua versão original em C#.
O projeto faz parte dos esforços da Software University Foundation para criar e distribuir conteúdo de
aprendizado aberto para treinamento de engenheiros de software e especialistas em TI.
Machine Translated by Google
Autor coletivo
Este livro foi desenvolvido por um grande grupo de autores voluntários que ofereceram
seu tempo para fornecer a você esse conhecimento sistematizado e orientação para
começar a programar. Lista de todos os autores e editores (em ordem alfabética):
https://softuni.bg/forum Neste
fórum de discussão você receberá uma resposta adequada e gratuita sobre quaisquer
questões do conteúdo educacional deste livro, bem como sobre outras questões de
programação. A comunidade SoftUni para iniciantes é tão grande que uma resposta a
uma pergunta geralmente é recebida em alguns minutos. Docentes, assistentes e
mentores da SoftUni também são responsáveis
constantemente às suas perguntas.
Machine Translated by Google
Prefácio 23
Devido ao grande número de alunos deste livro, no fórum você pode encontrar uma solução para
quase qualquer tarefa dele, compartilhada por um colega. Milhares de alunos antes de você já
resolveram os mesmos problemas; portanto, se você travar, pesquise no fórum. Embora as tarefas
do curso de Fundamentos da Programação mudem de tempos em tempos, o compartilhamento é
sempre incentivado no SoftUni, assim você encontrará facilmente soluções e orientações para
todas as tarefas.
Se você ainda tiver uma pergunta específica, por exemplo, por que não inicia um determinado
programa no qual você está pensando há várias horas, pergunte no fórum e você receberá uma
resposta. Você ficará surpreso com o quão bem-intencionados e receptivos são os habitantes do
fórum SoftUni.
fb.com/IntroProgrammingBooks
Licença e distribuição
O livro é distribuído gratuitamente em formato eletrônico sob uma licença aberta CC-BY-SA
(https://creativecommons.org/licenses/by-sa/4.0).
O livro é publicado e distribuído em papel pela SoftUni e uma cópia em papel pode ser adquirida
na recepção da SoftUni (ver https://softuni.bg/contacts).
Relatório de erros
Caso encontre erros, imprecisões ou defeitos no livro, você pode denunciá-los no rastreador
oficial do projeto:
Gostar de ler!
E não se esqueça de escrever muito código, experimente os exemplos de cada tópico e, acima
de tudo, resolva os exercícios. Você não aprenderá a programar apenas lendo, então resolva
problemas difíceis!
Machine Translated by Google
Machine Translated by Google
proteger deles.
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=sU_JUiersZg.
Programas de computador
Programas de computador são uma série de comandos escritos em uma linguagem de programação pré-selecionada,
como Java, C#, JavaScript, Python, Ruby, PHP, C, C++, Swift, Go ou outra. Para escrever comandos, precisamos
conhecer a sintaxe e a semântica da linguagem com a qual trabalharemos, no nosso caso Java. Portanto, vamos
apresentar neste livro a sintaxe e semântica da linguagem Java e programação em geral, aprendendo passo a passo
Algoritmos
Os programas de computador geralmente executam algum tipo de algoritmo. Algoritmos são uma sequência de
passos necessários para realizar um determinado trabalho e atingir algum resultado esperado, uma espécie de
“receita”. Por exemplo, se fritarmos ovos, seguimos uma determinada receita (algoritmo): esquentamos a gordura
em uma panela, quebramos os ovos, esperamos até que estejam fritos, retiramos do fogo. Da mesma forma, na
programação, os programas de computador executam algoritmos: uma sequência de comandos necessários para
realizar um determinado trabalho. Por exemplo, para organizar uma série de números em ordem crescente, é
necessário um algoritmo, por exemplo, encontre o menor número e imprima-o, a partir dos números restantes,
encontre o menor número novamente e imprima
Para facilitar a criação de programas, para escrever o código do programa (comandos), para
executar programas e para outras operações relacionadas à programação, também precisamos
de um ambiente de desenvolvimento, por exemplo, IntelliJ IDEA.
escrevemos mais comandos adicionais quando necessário e isso desperdiçará nosso tempo. É por isso que a
maioria dos programadores usa IDEs em seu trabalho diário. Para a programação Java,
costuma-se usar o ambiente de desenvolvimento IntelliJ IDEA, que é desenvolvido e distribuído gratuitamente
pela JetBrains e pode ser baixado em seu site: https://jetbrains.com/idea. Alternativas ao IntelliJ IDEA são Eclipse
(https://eclipse.org/downloads/packages), NetBeans
Se você não tiver a oportunidade de instalar um ambiente de desenvolvimento, também pode usar um IDE Java
online, como o Repl.it: https://repl.it/languages/java.
programação. As linguagens de baixo nível podem ser usadas para escrever as próprias instruções que controlam
o processador, por exemplo com a linguagem Assembler. Com linguagens de nível ligeiramente superior, como
C e C++, um sistema operacional, drivers de gerenciamento de hardware (por exemplo, driver de placa de vídeo),
navegadores da Web, compiladores, mecanismos de jogos e outros componentes do sistema podem ser criados
e programas. Com linguagens de nível ainda mais alto, como C#, Python e JavaScript, os programas aplicativos
são criados
As linguagens de baixo nível controlam diretamente o hardware e exigem muito esforço e um grande número de
comandos para fazer uma unidade de trabalho. Linguagens de alto nível requerem menos código por unidade de
trabalho, mas não têm acesso direto ao hardware. Software de aplicativo, como aplicativos da Web e móveis,
são desenvolvidos neles
formulários.
A maioria dos softwares que usamos diariamente, como reprodutor de música, reprodutor de vídeo, programa de
GPS, etc., são escritos em linguagens de programação de aplicativos de alto nível, como Java, C#, Python, C++,
JavaScript, PHP, etc.
Java é uma linguagem compilável, o que significa que escrevemos comandos que são compilados antes de
serem executados. O código escrito em Java não é compilado em código de máquina para um processador
específico, mas em código específico da linguagem chamado bytecode Java. Portanto, uma Java Virtual Machine
(JVM) é necessária para executar um programa escrito em Java.
O compilador Java, a máquina virtual e um conjunto de bibliotecas estão no centro da plataforma Java. A
plataforma Java é desenvolvida em diversas variedades:
Machine Translated by Google
System.out.println("Olá");
Veremos como podemos executar esse comando daqui a pouco, mas por enquanto vamos
apenas ver quais comandos estão na programação. Vamos nos familiarizar com mais alguns
exemplos.
Exemplo: um comando que verifica se uma palavra está contida dentro de outra
Podemos verificar se a palavra "gosho" contém a palavra "go" usando o método contains():
System.out.println("gosho".contains("ir"));
Marcamos a caixa com a qual concordamos com os termos das licenças (Aceitar Contrato
de Licença) e selecionamos o arquivo de instalação de acordo com nosso sistema
operacional. Por exemplo, Windows de 64 bits:
A instalação do JDK em um ambiente Linux pode ser bem diferente, geralmente instalando
um pacote padrão de um repositório central: sudo apt install default-jdk.
Selecionamos [Next] novamente e uma janela com o painel de instalação do IntelliJ IDEA é
carregada.
Após a instalação do IntelliJ IDEA, aparecerá uma tela informativa na qual marcamos a caixa de
seleção [Run IntelliJ IDEA] e pressionamos o botão [Finish] para concluir a instalação e iniciar
o ambiente de desenvolvimento:
Machine Translated by Google
Selecionamos a pasta com a instalação do JDK (não JRE) e pressionamos o botão [OK].
Isso é tudo. Estamos prontos para usar o IntelliJ IDEA.
O IntelliJ IDEA criará um programa Java vazio para nós que precisamos adicionar.
para dentro, como parte da formatação do texto, para facilitar a revisão e/ou depuração.
System.out.println("Olá Java");
System) e realizar alguma ação sobre ele (neste caso imprimir algo que está especificado entre
parênteses) . Mais tecnicamente explicado, chamamos o método println(…) da classe PrintStream, que
faz parte da classe System , e passamos a ele o literal de texto "Hello Java" como parâmetro.
Machine Translated by Google
Iniciar o programa
Para iniciar o programa, pressione [Ctrl+Shift+F10]. Se não houver erros, o programa será
executado. O resultado será gravado no console (a janela localizada na parte inferior do
IntelliJ IDEA):
Olá Java
tarefas são executadas atualmente pelo sistema. Cada tarefa passa por uma série de testes, e cada
teste aprovado com sucesso dá os pontos destinados a ele. Os testes que são enviados para as
atribuições ficam ocultos.
Enviamos a decisão de avaliação com o botão [Enviar]. O sistema retorna um resultado após alguns
segundos na tabela de soluções enviadas. Se necessário, podemos pressionar o botão para atualizar os
resultados [refresh] na parte superior direita da tabela com as soluções enviadas para verificação:
Na tabela com as decisões submetidas, o sistema de juízes exibirá um dos seguintes resultados possíveis:
• Número de pontos (entre 0 e 100) quando o código passado compila com sucesso
(sem erros de sintaxe) e pode ser testado.
o Com uma solução correta, todos os testes são marcados em verde e obtemos
100 pontos.
o No caso de uma decisão errada, alguns dos testes são marcados em vermelho e
obtemos um número incompleto de pontos ou 0 pontos.
Machine Translated by Google
System.out.println("Olá SoftUni");
Outro erro é misturar letras maiúsculas e minúsculas, e elas importam na hora de chamar
os comandos e seu bom funcionamento. Aqui está um exemplo de
tal erro:
No exemplo acima, Println está escrito incorretamente e deve ser corrigido para println.
Faltar um ponto e vírgula (;) no final dos comandos é um dos eternos problemas do
programador novato. A falta deste sinal faz com que o programa funcione mal e muitas
vezes o problema passa despercebido. Aqui está um exemplo de código de erro:
Este programa dará um erro ao tentar compilar e executar, e antes mesmo disso o código
será destacado para chamar a atenção do programador para o erro que ele cometeu (a
falta de aspas de fechamento).
Outro erro comum que iniciantes cometem é tentar escrever o método main(…)
fora da classe:
Bem-vindo aos exercícios. Agora escreveremos alguns programas de console para dar mais
alguns primeiros passos na programação e, em seguida, mostraremos como podemos
programar algo mais complexo - programas com uma interface gráfica e de usuário da web.
Encontramos o método static void main(String[] args) e inserimos seu corpo entre { e }. Em
seguida, precisamos escrever o código para avaliar a expressão numérica acima e imprimir
seu valor no console. Passamos a expressão numérica acima entre parênteses para o
comando System.out.println(…). Iniciamos o programa
com [Ctrl+Shift+F10] e verificamos se o resultado é o mesmo
como na foto:
Tarefa: os números de 1 a 20
Escrever um programa de console Java que imprima os números de 1 a 20 em linhas separadas
para o console.
Diretrizes e dicas
Criamos uma nova classe Java chamada "Nums1To20" (clique com o botão direito na pasta [src] ÿ
[Novo] ÿ [Classe Java]):
algo mais. Os mais perspicazes devem estar se perguntando se não existe uma maneira mais
inteligente. Relaxe, há, mas mais sobre isso depois.
1
2
…
20
Diretrizes e dicas
Estamos criando um novo aplicativo de console Java chamado “TriangleOf55Stars”.
Nela, precisamos escrever um código que imprima o triângulo de asteriscos, por
exemplo, através de 10 comandos como os abaixo:
System.out.println("*");
System.out.println("**");
…
2 7 14 12 5 60 78 56
Diretrizes e dicas
Machine Translated by Google
Criamos um novo programa Java de console. Para ler os dois números, usamos o seguinte
código:
importar java.util.Scanner;
2
7
14
Diretrizes e dicas
Estamos fazendo um novo programa de console Java. Para ler o número n (2 ÿ n
ÿ100), usamos o seguinte código:
para o usuário, eles ficam muito melhores visualmente, usam mouse e toque do dedo (em tablets e
telefones), mas por trás de tudo está a programação. E é por isso que temos que aprender a programar e
já fizemos nossos primeiros
passos muito pequenos.
Os aplicativos gráficos (GUI) têm uma interface visual do usuário, diretamente em seu computador ou
dispositivo móvel, sem a necessidade de um navegador da web. Os aplicativos gráficos (aplicativos de
desktop ou, em outras palavras, aplicativos de desktop) consistem em uma ou mais janelas gráficas nas
quais estão localizados determinados controles (campos de texto, botões, figuras, tabelas, etc.), servindo
para um diálogo com o usuário em um maneira mais intuitiva. Os aplicativos móveis em seu telefone e
tablet são semelhantes: usamos formulários, caixas de texto, botões e outros controles e os gerenciamos
por meio de código de programação. É por isso que aprendemos a escrever código agora: o código está
em toda parte no desenvolvimento de software.
Ao contrário dos aplicativos de console, que leem e gravam seus dados como texto no console, os
aplicativos gráficos (GUI) têm uma interface visual com o usuário. Os aplicativos gráficos (aplicativos de
desktop) consistem em uma das várias janelas gráficas nas quais existem controles: campos de texto,
botões, figuras, tabelas e outros.
Machine Translated by Google
O arquivo que contém nossa visão de aplicação está localizado no caminho [src/sample/
sample.fxml]. Vamos lá abrir:
Machine Translated by Google
O arquivo se parece com isso. Não trabalharemos diretamente com ele, mas usaremos
o mencionado SceneBuilder, que gerará o código para nós. Clique com o botão direito
do mouse no arquivo e selecione [Abrir no SceneBuilder]:
Ao selecionar esta opção pela primeira vez, o IntelliJ IDEA solicitará o caminho para o
SceneBuilder.exe:
Esta é a nossa janela onde agora podemos começar a adicionar controles que tiramos do mesmo local
em que adicionamos o [AnchorPane] (no menu [Containers]). Para nossa interface precisamos:
Iremos renomear os controles, escolhendo nomes mais adequados que correspondam à funcionalidade
do nosso aplicativo ("+" e "="). Isso é feito clicando no controle que queremos alterar e indo à direita de
suas propriedades ([Propriedades]). Para começar, vamos alterar a propriedade Text dos rótulos. Seu
nome padrão é Label:
Para melhor atender a lógica do nosso programa, escolhemos nomes mais significativos. Substituímos o
primeiro texto Label por +:
Machine Translated by Google
Da mesma forma, alteramos o texto do segundo rótulo para = e o rótulo do botão para
Calcular:
Talvez o aplicativo pareça maior ou menor do que eu esperava. A razão para isso é que
há uma parte em nosso código de aplicativo que diz explicitamente quais devem ser suas
dimensões. Vamos corrigir este problema.
Machine Translated by Google
Excluímos o código que informa ao nosso programa qual será o tamanho da janela para usar o
dimensionamento que escolhemos no SceneBuilder:
Lançamos o aplicativo:
O design da parte gráfica parece pronto. Agora é hora de algo muito mais interessante - a lógica do programa. É
hora de escrever o código que soma os números dos dois primeiros campos e exibe o resultado no terceiro campo.
Para fazer isso, precisamos voltar ao SceneBuilder e dar nomes aos campos de texto para
Clicamos no primeiro campo de texto com o mouse e vamos para a seção [Código] à direita,
onde daremos o nome num1 no campo fx:id:
Agora vamos dizer ao botão qual função executar quando for clicado. Vamos ao campo On
Action e damos a ele o nome da função de cálculo, que criaremos em instantes:
Machine Translated by Google
Podemos ver que nossos campos possuem nomes e nosso botão possui uma função
a ser executada ao ser clicado. Até aqui tudo bem, mas esses campos e a função do
botão ainda não existem em nosso código. Para gerá-los, iremos a cada um deles e
pressionaremos [Alt+Enter] ÿ [Criar campo] [nome do campo]:
Machine Translated by Google
Uma vez criado um dos campos, seremos redirecionados para o arquivo Controller.java,
onde o campo será criado em um código como este:
Este código pega o primeiro número do campo num1 em uma variável num1, então o
segundo número do campo num2 em uma variável num2, então soma num1 + num2
em uma variável de resultado e, finalmente, gera o valor de texto do resultado no
campo de resultado .
Machine Translated by Google
Isso acontece devido à conversão de um campo de texto em um número. Se o valor no campo não for um número,
o programa será interrompido e lançará uma exceção. Pudermos
corrija o código assim:
Com esse código, detectamos erros ao trabalhar com números (capturar exceções) e, em caso de erro, exibimos
um valor de "erro" no campo de resultado. Reiniciamos o programa com [Shift+F10] e tentamos se funcionar. Desta
vez, para um número errado, o resultado é "erro" e o programa não quebra:
É complicado? Tudo bem ser complicado, claro. Estamos entrando na programação. O exemplo acima requer muito
mais conhecimento e habilidades que desenvolveremos neste livro e até além. Apenas deixe-me me divertir um
pouco com a programação de desktop.
Se algo não funcionar, assista ao vídeo no início deste capítulo ou pergunte no fórum SoftUni: https://softuni.bg/
forum. Ou sinta-se à vontade para passar para o próximo exemplo ou o próximo capítulo do livro. A hora vai chegar
e vai
Machine Translated by Google
é fácil para você, mas você realmente tem que se esforçar e persistir. A programação é
aprendida lentamente e com muita e muita prática.
Ao contrário dos aplicativos de console, que lêem e gravam seus dados como texto no
console, os aplicativos da web têm uma interface de usuário baseada na web. Os
aplicativos da Web são carregados de algum endereço da Internet (URL) por meio de
um navegador da Web padrão. Os usuários gravam os dados de entrada em uma página
renderizada pelo aplicativo da web, os dados são processados no servidor da web e os
resultados são exibidos de volta na página no navegador da web.
Para nossa aplicação web, utilizaremos a tecnologia Spring MVC, que permite criar
aplicações web com a linguagem de programação Java no ambiente de desenvolvimento
IntelliJ IDEA. No IntelliJ
IDEA, importe o projeto (esqueleto do aplicativo) deste link: https://github.com/SoftUni/
Programming-Basics-Book-Java-BG/blob/master/assets/ Chapter-1-assets via [Import
Project ]:
Machine Translated by Google
Executamos o projeto para ver se ele inicia sem erros. Para isso, iremos até a pasta
[src/main/java/com.softuni] e abriremos o arquivo SumatorApplication:
Até aqui tudo bem, exceto quando inserimos dois números e pressionamos [Calcular],
nada acontece. Vamos escrever a lógica para o somador funcionar corretamente. Abra o
arquivo HomeController na mesma pasta e você verá o seguinte:
Atualmente, esta função pega dois textos num1 e num2, os alimenta no servidor e retorna o índice do
arquivo para o usuário. Como você pode imaginar, não há nenhum código interno para calcular os números
nas duas caixas de texto e alimentá-los na terceira caixa. Vamos escrever a lógica que realizará isso.
Antes de voltarmos ao aplicativo, precisamos aplicar nossas alterações. Faremos isso indo para a janela
do console e pressionando o botão [Rerun application]:
O aplicativo está pronto. Se inserirmos dois números nas caixas de texto e pressionarmos o botão
[Calcular], o resultado deverá aparecer na terceira caixa de texto:
Machine Translated by Google
Parece assustador? Não tenha medo! Ainda temos muito que aprender para atingir o nível de conhecimento e
habilidades para escrever livremente aplicações baseadas na web como o exemplo acima e outras bem maiores e
mais complexas. Se você não conseguir, não se preocupe, apenas continue. Com o tempo, você se lembrará com
um sorriso de como foi incompreensível e emocionante seu primeiro encontro com a web.
a programação.
Se você tiver problemas com o exemplo acima, assista ao vídeo no início deste capítulo. Lá o aplicativo é feito
passo a passo ao vivo com muitas explicações. Ou pergunte no fórum SoftUni: https://softuni.bg/forum. O propósito
dos dois exemplos acima (aplicativo de desktop gráfico e aplicativo da web) não é aprender, mas tocar
a programação mais profundamente, despertar seu interesse no desenvolvimento de software e inspirá-lo a estudar
muito. Você ainda tem muito a aprender, mas é interessante, não é?
Machine Translated by Google
Machine Translated by Google
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=7u4X5X-a9Qg.
console do sistema
Normalmente chamado apenas de "console", o sistema ou console do computador é o dispositivo através do qual
emitimos comandos para o computador em
forma de texto e obtemos os resultados de sua execução novamente como texto.
Na maioria dos casos, o console do sistema é um terminal de texto, ou seja, aceita e renderiza apenas texto, sem
elementos gráficos como botões, menus, etc. Geralmente se parece com uma janela preta na qual digitamos
executar comandos do console que imprimem a saída de texto. No Windows
Na maioria dos sistemas operacionais, o console geralmente está disponível como um aplicativo autônomo no qual
escrevemos vários comandos de console. No Windows é chamado de Prompt de Comando e no Linux e macOS é
chamado de Terminal. Os aplicativos de console são executados no console. Eles lêem a entrada de texto da linha
de comando e
Machine Translated by Google
imprimir sua saída como saída de texto para o console. Neste livro, aprenderemos a
programar criando principalmente aplicativos de console.
É assim que o console do Linux se parece:
importar java.util.Scanner;
Agora na variável num do tipo inteiro int lemos o valor passado como entrada do console.
Java é uma linguagem tipada estaticamente, o que significa que as variáveis possuem
um tipo que é determinado em tempo de compilação e não pode ser alterado
instantaneamente (como em linguagens dinâmicas como JavaScript e Python). No
exemplo acima, a variável do scanner é do tipo java.util.Scanner (leitor de texto de
varredura) e a variável num é do tipo int (inteiro).
importar java.util.Scanner;
Veja como o programa funcionaria para um quadrado com tamanho de lado 15:
Tente digitar um número errado, por exemplo "alô". Você receberá uma mensagem de erro de tempo
de execução (exceção).
Isso é perfeitamente normal porque a linguagem Java é uma linguagem fortemente tipada. Mais tarde,
veremos como podemos detectar esses erros e forçar o usuário a digitar novamente um número.
A primeira linha Scanner scanner = new Scanner(System.in); cria uma nova instância da
classe Scanner com syslog padrão.
A próxima linha System.out.print("a = "); imprime uma mensagem informativa solicitando
ao usuário que insira o lado a do quadrado. Após a impressão, o cursor permanece na
mesma linha. Permanecer na mesma linha é mais conveniente para o usuário puramente
visual. Ele usa System.out.print(…); em vez de System.out.println( …); e assim o cursor
permanece na mesma
linha. A próxima linha int a = scanner.nextInt();
ler um inteiro do console. O resultado é gravado em uma variável chamada a.
Cálculos em programação
Sabemos sobre computadores que são máquinas que processam dados. Todos os dados
são armazenados na memória do computador (memória RAM) em variáveis. As variáveis
são áreas nomeadas da memória que armazenam dados de um tipo específico, como um
número ou texto. Cada variável em Java tem um nome, um tipo e um valor. Veja como
definiríamos uma variável, declarando-a e atribuindo-lhe um valor:
Após o processamento, os dados são gravados de volta em variáveis (ou seja, em algum
lugar da memória alocada por nosso programa).
Machine Translated by Google
Atentemos para o fato de que na leitura de texto não é necessária a conversão para
outro tipo. Isso ocorre porque, por padrão, o scanner. nextLine(…) retorna texto como
resultado. Além disso, podemos definir o texto a ser convertido em um número inteiro
usando Integer.parseInt(…) ou um número fracionário usando Double.parseDouble(…).
Se isso não for feito, para o programa cada número será apenas um texto com o qual não
poderíamos fazer nada
operaçoes aritimeticas.
Observe como cada variável deve ser passada na ordem em que queremos que seja
impressa e corresponda ao tipo passado no modelo. Essencialmente, o modelo
(placeholder) aceita variáveis de qualquer tipo.
Operaçoes aritimeticas
Vejamos as operações aritméticas básicas na programação.
int a = 5; int
b = 7; int
soma = a + b; // resultado é 12
int a = Integer.parseInt(scanner.nextLine());
Machine Translated by Google
int a = 5; int
b = 7; int
produto = a * b; // 35
• Quando dividimos dois inteiros, a divisão inteira é realizada e o resultado é um inteiro com
a parte fracionária truncada. Por exemplo, 11 / 3 = 3. • Quando dividimos dois números,
dos quais pelo menos um é uma fração, uma divisão fracionária é realizada e o resultado
resultante é um número fracionário, como na matemática. Por exemplo, 11/4,0 = 2,75. Se
for impossível dividir exatamente, o resultado é arredondado, por exemplo 11,0 / 3 =
3,66666666666667.
• A divisão de inteiro por 0 gera um erro de tempo de execução (Java.lang.ArithmeticException).
Vejamos também alguns exemplos de divisão de inteiros (lembre-se que ao dividir inteiros
na linguagem Java, o resultado é um inteiro):
int a = 25;
System.out.println(a / 4); // Resultado inteiro: 6 System.out.println(a /
0); // Erro: divisão por 0
int a = 15;
System.out.println(a / 2.0); // Resultado fracionário: 7.5 System.out.println(a /
0.0); // Output: Infinity System.out.println(-a / 0.0); // Output: -Infinity
System.out.println(0.0 / 0.0); // Resultado: NaN (não é um número), // ie.
não é um valor numérico válido
7.5 ?
-?
NaN
Você percebe algo estranho? Talvez você esperasse que os números a e b somassem? Na verdade, a
concatenação funciona da esquerda para a direita e o resultado acima está absolutamente correto. Se
quisermos somar os números, precisaremos usar parênteses para mudar a ordem das operações:
expressões numéricas
Na programação, também podemos calcular expressões numéricas, por exemplo:
A regra padrão para prioridades de operações aritméticas se aplica: a multiplicação e a divisão são
sempre realizadas antes da adição e da subtração. Quando uma expressão está presente entre
parênteses, ela é avaliada primeiro, mas sabemos tudo isso de
matemática escolar.
34
5
Área do trapézio = 17,5
* *
• Face = ÿ • r r
* *
Perímetro = 2 r
pi
• ÿ ÿ 3,14159265358979323846…
Agora temos um projeto IntelliJ IDEA vazio criado (sem nenhuma classe Java nele, que
deve estar localizada na pasta src):
O objetivo deste projeto é adicionar uma classe .Java para cada tarefa de
Os exercícios.
Diretrizes e dicas
Criamos uma nova classe .Java em um projeto IntelliJ IDEA existente. Clique com o botão
direito do mouse na pasta [ src] . Selecione [Novo] ÿ [Classe Java]:
Machine Translated by Google
Uma caixa de diálogo será aberta para selecionar um nome de classe Java, por exemplo
“Área Quadrada”:
Agora temos um projeto com uma classe Java nele. Resta escrever o código para resolver a tarefa.
Para fazer isso, adicionamos à nossa classe Java o método Main (como mostrado na figura) e vamos
ao corpo do método Main(string[] args) , onde escrevemos o seguinte código entre as chaves de
abertura e fechamento:
Aparece uma caixa de diálogo na qual escrevemos o nome do arquivo. No nosso caso
é "InchesToCentimeters" ÿ [OK]:
Se usarmos [Shift+F10] ou pressionar uma das duas setas verdes (localizadas no canto
superior direito e no canto inferior esquerdo da janela do IntelliJ IDEA)
Alternar entre projetos é muito fácil, certo? Simplesmente selecionamos o arquivo com o código-fonte do
programa, clicamos duas vezes nele com o mouse e, ao iniciar, o programa inicia a partir deste arquivo.
Se o programa espera uma vírgula e um número com vírgula é digitado, ou vice-versa (é digitada uma
vírgula quando se espera uma vírgula), ocorrerá o seguinte erro:
Diretrizes e dicas
Primeiro, criamos uma nova classe Java chamada “Greeting” no projeto “SimpleCalculations”
Precisamos escrever o código do programa. Se estiver com problemas, você pode usar o
código de exemplo abaixo:
Diretrizes e dicas
Adicionamos ao projeto IntelliJ IDEA atual outra classe Java chamada "ConcatenateData".
Escrevemos o código que lê os dados de entrada do console:
Deve ser adicionado o código que imprime a mensagem descrita na condição da tarefa.
Na imagem acima, o código está deliberadamente desfocado para que você possa pensar em como fazê-lo
escreva você mesmo.
A figura acima mostra um trapézio com lados 8 e 13 e altura 7. Tem uma face de (8 + 13) * 7 / 2
= 73,5.
Diretrizes e dicas
Novamente, precisamos adicionar ao projeto atual no IntelliJ IDEA outra classe Java chamada
"TrapezoidArea" e escrever o código que lê os dados de entrada do console
lata, calcula a face do trapézio e a imprime:
O código na imagem é deliberadamente desfocado para que você possa pensar sobre ele e
escrevê-lo você mesmo.
Teste a solução localmente com [Ctrl+Shift+F10] e inserindo dados de exemplo.
Diretrizes e dicas
Para cálculos, você pode usar as seguintes fórmulas:
Machine Translated by Google
• Área = Math.PI * r * r.
• Perímetro = 2 * Math.PI * r.
60 30 600,25
20 1500 40 2000 500,75 350449.6875
10 160 70 180 100,50 2402
50 -10 -200,5
20 15
Área do triângulo = 300 Área do triângulo = 262,5
30 35
7,75 1,23456
Área do triângulo = 32,74 Área do triângulo = 2,82
8,45 4,56789
solução: https://judge.softuni.bg/Contests/Practice/Index/649#10.
*
Tarefa: conversor de moeda do console
Escreva um programa para converter uma quantia em dinheiro de uma moeda para outra. As seguintes
moedas devem ser suportadas: BGN, USD, EUR, GBP. Use as seguintes taxas de câmbio fixas:
A entrada é o valor a ser convertido, a moeda de entrada e a moeda de saída. A saída é um único número -
o valor convertido nas taxas acima, arredondado para 2 casas decimais.
20 12h35
USD 35,91 BGN EUR 9,53 libras esterlinas
BGN GBP
100 150,35
BGN 51,13 euros USD 138,02 euros
EUR EUR
solução: https://judge.softuni.bg/Contests/Practice/Index/649#11.
**
Tarefa: acerto de contas com datas - 1000 dias na Terra
Machine Translated by Google
Diretrizes e dicas
• Encontre informações sobre os tipos Date, Calendar e SimpleDateFormat em Java
e examine especificamente os métodos Calendar.setTime(date),
Calendar.add(countDays) e SimpleDateFormat.format(date). Com a ajuda deles,
você pode resolver a tarefa sem precisar calcular dias,
meses e anos bissextos.
• Não imprima nada extra no console além da data exigida!
System.out.printf( "Você
é %s %s, uma pessoa de %d anos de %s.", primeiroNome,
Sobrenome, idade, cidade);
Operadores aritméticos
Vamos relembrar os operadores aritméticos básicos para cálculos com números.
Machine Translated by Google
Operador +
Operador -
*
Operador
resultado int = 3 * 5; // resultado é 15
Operador /
Concatenação
Ao usar o operador + entre variáveis de tipo de texto (ou entre texto e um número), o
chamado concatenação (concatenação de string).
Tarefas de exame
Agora que lembramos como realizar cálculos com números e como ler e imprimir
números no console, vamos às tarefas. Resolveremos várias tarefas do vestibular para
a candidatura ao SoftUni.
100 cm. Estima-se que exatamente 1 trabalho seja perdido por causa da porta da frente (que tem
abertura de 160 cm) e por causa da cadeira (que tem 160 por 120 cm) exatamente 2 empregos
sejam perdidos. Escreva um programa que insira as dimensões de uma sala de aula e calcule o
número de locais de trabalho nela para o layout descrito (veja a figura). Dados de entrada
2 números são lidos no console, um por linha: l (comprimento em metros) ew (largura em metros).
Restrições:
3 ÿ w ÿ l ÿ 100.
Dados de saída
Para imprimir um único inteiro no console: o número de assentos na sala de aula.
15
129
8.9
8,4
39
5,2
*
mesas por fila (11 * 70 cm = 770 cm + 20 cm restantes). Número de assentos = 12 - 3 = 11 - 3 = 132
129 (temos 12 filas de 11 assentos = 132 menos 3 assentos para a cadeira e porta da frente).
No segundo exemplo, o corredor tem 840 cm de comprimento. 7 linhas podem ser colocadas nele (7 * 120
cm = 840, sem resto). O corredor tem 520 cm de largura. Destes, 100 cm vão para o corredor do meio. Os
420 cm restantes podem acomodar 6 mesas por fileira (6 * 70 cm = 420 cm, sem sobra). Número de
*
assentos = 7 6 - 3 = 42 - 3 = 39 (temos 7 fileiras de 6 assentos = 42 menos 3 assentos para a cadeira e
porta da frente).
Diretrizes e dicas
Tente resolver a tarefa sozinho primeiro. Se você falhar, confira as diretrizes
e as dicas.
Como em qualquer tarefa de programação, é importante ter uma ideia para a solução antes de começarmos
a escrever o código. Vamos dar uma olhada mais de perto em nossa condição definida. Somos obrigados
a escrever um programa que calcule o número de postos de trabalho em um hall, e esse número depende
de seu comprimento e altura. Percebemos que eles nos serão dados como dados de entrada em metros,
e as informações sobre quanto espaço ocupam os locais de trabalho e o corredor nos são fornecidas em
centímetros. Para realizar os cálculos, teremos que usar as mesmas unidades de medida, não importa se
optamos por converter a altura e o comprimento em centímetros ou o restante dos dados em metros. Para
a solução aqui apresentada, a primeira opção é escolhida.
Precisamos calcular quantas colunas e quantas fileiras de mesas serão coletadas. Podemos calcular as
colunas subtraindo o espaço necessário para o corredor (100 cm) da largura e dividindo o restante por 70
cm (o comprimento de um local de trabalho). Encontraremos as linhas dividindo o comprimento por 120 cm.
Em ambas as operações, pode-se obter um número real com uma parte inteira e uma parte fracionária,
mas devemos salvar apenas a parte inteira em uma variável. Por fim, multiplicamos o número de linhas
pelo número de colunas e subtraímos 3 dele (os lugares que se perdem por causa da porta da frente e da
catedral). Assim obteremos o valor solicitado.
A partir da entrada de amostra, podemos ver que para a entrada podemos receber um número real com um
inteiro e uma parte fracionária, portanto, não é apropriado escolher o tipo int, vamos usar double para
eles . A escolha do tipo para as seguintes variáveis depende do método de solução que escolhemos. Como
qualquer problema de programação, este tem mais de uma solução. Dois deles serão mostrados aqui.
Responder
A primeira coisa que precisamos fazer é ler a entrada do console. Com scanner.nextLine()
lemos os valores do console, e com a função Double.parseDouble(…) convertemos o
valor set string (texto) em um double.
Vamos aos cálculos. O especial aqui é que depois de fazer a divisão, precisamos salvar
em uma variável apenas a parte inteira do resultado.
Neste caso, podemos tentar a seguinte busca: java get integer part of double. Achamos
que precisamos usar o método Math.floor(…). Como funciona com variáveis do tipo
double, criamos uma variável para o número de linhas e colunas
livi também deste tipo.
Dados de entrada
4 números são lidos no console, um por linha:
• Primeira linha - preço por quilo de vegetais - número de ponto flutuante. • Segunda
linha – preço por quilo de fruta – número de ponto flutuante. • Terceira linha -
quilogramas totais de vegetais - número inteiro.
• Quarta linha - quilos totais de frutas - número inteiro.
Limites: Todos os números estarão entre 0,00 e 1000,00.
Dados de saída
Para imprimir um único número de ponto flutuante no console: a receita de todas as frutas e legumes em
euros.
0,194 1,5
19,4 2,5
101 20.6185567010309
10 10
10 10
Diretrizes e dicas
Machine Translated by Google
Primeiro, daremos algum raciocínio e, em seguida, orientações específicas para resolver o problema, bem
como a parte essencial do código.
primeiro olhar para nossa condição dada. Nesse caso, somos solicitados a calcular a receita total da
colheita. É igual à soma do lucro em baht das frutas e verduras, e podemos calculá-los multiplicando o
preço do quilo pela quantidade. Os dados de entrada são fornecidos em BGN e a saída deve ser em Euro.
Por condição, 1 euro é igual a 1,94 BGN, portanto, para obter o valor de saída solicitado, devemos dividir a
soma por 1,94.
Depois de esclarecer nossa ideia de resolver o problema, podemos proceder à seleção dos tipos de dados
apropriados. Vejamos a entrada: dados dois números inteiros para o número total de quilos de vegetais e
frutas, respectivamente, as variáveis que declaramos para manter seus valores serão do tipo int. Para
preços de frutas e vegetais, especifica-se que serão fornecidos dois números de ponto flutuante, ou seja.
variáveis serão do tipo double.
Poderíamos também declarar duas variáveis para manter o valor do lucro de frutas e vegetais
separadamente. Como estamos multiplicando uma variável int (total de quilogramas) por um double
(preço), o resultado também deve ser um double. Vamos deixar claro: em geral, os operadores trabalham
com argumentos do mesmo tipo. Portanto, para realizar uma operação como a multiplicação em dois tipos
de dados diferentes, precisamos convertê-los para o mesmo tipo de dados. Quando existem tipos com
escopos diferentes em uma expressão, a conversão é sempre feita para aquele com maior escopo, neste
caso double. Como não há risco de perda de dados, a conversão é implícita e feita automaticamente pelo
compilador.
Responder
Exemplo: um terreno de 20 m2 tem uma área de 400 m2. Uma bancada com 1 m de largura
e 2 m de comprimento ocupa uma área de 2 m2. Uma telha tem 5 m de largura e 4 m de
comprimento e uma área = 20 m2. A área a ser coberta é de 400 – 2 = 398 m2. 398 / 20 =
*
19,90 ladrilhos são necessários. O tempo necessário é 19,90 0,2 = 3,98 minutos.
Dados de entrada
5 números são lidos no console:
Dados de saída
Para imprimir dois números no console: o número de telhas necessárias para o reparo e
o tempo de colocação, cada um em uma nova linha.
20 40
5 0,8
19,9 3302.08333333333
4 0,6
3,98 660.416666666667
1
2 35
Diretrizes e dicas
Vamos fazer um desenho para
explicar a condição da tarefa. Pode
parecer o carro da direita.
Ideia de solução
Somos obrigados a calcular o número de
ladrilhos a serem colocados, bem como
o tempo que levará. Para calcular o
número, é necessário considerar a área
a ser coberta e dividi-la pela face de uma
telha. Na condição de plano-
Machine Translated by Google
o quintal é quadrado, portanto vamos encontrar a área total multiplicando seu lado pelo seu valor N *
N. A seguir calculamos a área ocupada pela bancada, também multiplicando seus dois lados M * O.
Subtraindo a área de a bancada da de todo o playground, obtemos a área que precisamos
reparos.
Calculamos a face de um único ladrilho multiplicando um lado pelo outro - W * L. Como já observamos,
agora precisamos dividir a área para cobrir a área de um único ladrilho. Dessa forma, descobriremos
qual é o número necessário de ladrilhos. Multiplicamos por 0,2 (o tempo em que, por condição, uma
peça é colocada). Assim já teremos os valores de saída solicitados.
Responder
Como nos problemas anteriores, podemos dividir mentalmente a solução em três
peças:
A primeira coisa que precisamos fazer é olhar para a entrada da tarefa. É importante prestar atenção
à ordem em que são dadas. Com digitalizador. nextLine() lemos os valores do console, e com
Integer.parseInt(…) e Double.ParseInt(…) convertemos o valor set string em int e double,
respectivamente.
As variáveis w e h são do tipo double, ou seja , para a face de um ladrilho criamos uma
variável do mesmo tipo. Por fim, calculamos os valores que precisamos imprimir no console.
O número de ladrilhos necessários é obtido dividindo a área a ser coberta pela área de um
único ladrilho. Ao dividir dois números, um dos quais é real, o resultado é um número real
com uma parte inteira e uma parte fracionária. Portanto, para que nossos cálculos fiquem
corretos, armazenamos o resultado em uma variável do tipo double. Nenhuma formatação
ou arredondamento de saída especial é especificado na condição da tarefa, então
simplesmente imprimimos os valores com System.out.println(…).
Tarefa: moedas
Algum tempo atrás, Peso comprou alguns bitcoins. Agora ele vai fazer uma viagem pela
Europa e vai precisar de euros. Além dos bitcoins, também existem o yuan chinês. Peso
quer trocar seu dinheiro por euros para a excursão. Escreva um programa para calcular
quantos euros ele pode comprar com as seguintes taxas de câmbio:
• 1 bitcoin = BGN 1168.
• 1 Yuan Chinês = 0,15 USD. • 1 dólar
= 1,76 BGN. • 1 euro = 1,95
BGN.
Machine Translated by Google
A casa de câmbio tem uma comissão de 0 a 5 por cento do valor final em euros.
Dados de entrada
3 números são lidos no console:
• Na primeira linha – o número de bitcoins. Um número inteiro no intervalo [0 … 20]. •
Na segunda linha – o número de yuans chineses. Um número real no intervalo [0,00 … 50
000,00].
• Na terceira linha – a comissão. Um número real no intervalo [0,00 … 5,00].
Dados de saída
No console para imprimir 1 número - o resultado da troca de moedas. O resultado não precisa
ser arredondado.
1 20
5 569.668717948718 5678 12442.2442010256
5 2.4
Conecte-se Saída
7
50200.12 10659.4701177436
3
Explicação:
• 1 bitcoin = BGN 1168
Diretrizes e dicas
Novamente, vamos primeiro pensar em como podemos resolver o problema antes de
começarmos a escrever o código.
Machine Translated by Google
Ideia de solução
Vemos que seremos alimentados com o número de Bitcoins e o número de Yuan chinês. O valor
de saída é especificado em Euros. A condição também especifica as taxas de câmbio com as
quais devemos trabalhar. Notamos que só podemos converter um valor em BGN para Euro,
portanto, precisamos primeiro calcular o valor total que Pesho possui em BGN e depois calcular
o valor de saída.
Como recebemos informações sobre a taxa de câmbio de bitcoins para leva, podemos fazer essa conversão
diretamente. Por outro lado, para obter o valor do yuan chinês em BGN, devemos primeiro convertê-los em
dólares e depois converter os dólares em BGN. Por fim, somaremos os dois valores resultantes e
Resta o último passo: calcular quanto será a comissão e subtrair o valor recebido do total. Como comissão,
receberemos um número real, que representará uma certa porcentagem do valor total. Vamos começar dividindo
o número dado por 100 para calcular seu valor percentual. Vamos multiplicá-lo pelo valor em euros e subtrair o
resultado do mesmo valor. Iremos imprimir o valor recebido no console.
são dados como um número inteiro, então podemos declarar seu valor como uma variável int. Como o número
de yuan chinês e comissão, obteremos um número real, portanto, usamos o dobro para eles. Como double é
o tipo de dados de escopo maior e a saída também será um número real, também o usaremos para o restante
das variáveis que criamos.
Responder
Uma vez que tenhamos uma ideia da solução do problema e tenhamos escolhido as estruturas de dados com
as quais trabalharemos, é hora de começar a escrever o código. Como nos problemas anteriores, podemos
dividir a solução em três
subtarefas:
Declaramos as variáveis que usaremos, novamente tendo o cuidado de escolher nomes significativos que
sugiram o que elas contêm. Inicializamos seus valores: com scanner.nextLine() lemos os números fornecidos
no console e convertemos a string inserida pelo usuário em int ou double.
Machine Translated by Google
Por fim, calculamos o valor da comissão e subtraímos ao valor em euros. Vamos prestar atenção à forma
como podemos escrever isto: euro -= comissão * euro é uma forma abreviada de escrever euro = euro -
(comissão * euro). Nesse caso, usamos um operador de atribuição composto -=, que subtrai o valor do
operando à direita daquele à esquerda. O operador for tem precedência maior que o operador composto,
então a expressão euro é executada primeiro, então seu valor é subtraído. Você pode ler mais sobre
comissão de * operadores no livro "Introduction to Java Programming" (p. 116).
multiplicação *
Atentemos para algo que se aplica a todas as tarefas desse tipo: assim disposta, a solução da tarefa é
bastante detalhada. Como a condição geralmente não é complicada, poderíamos, em teoria, escrever uma
grande expressão na qual, logo após receber os dados de entrada, calculamos o valor de saída. Por exemplo,
tal expressão ficaria assim:
Este código daria o resultado correto, mas é difícil de ler. Não será fácil para nós descobrir o que ele faz e se
contém erros, bem como como corrigi-los. Uma prática melhor é escrever várias expressões simples em vez
de uma expressão complexa e armazenar seus resultados em variáveis com nomes apropriados. Isso torna o
código claro e fácil de alterar.
Ivan é programador de uma empresa americana e trabalha em casa em média N dias por mês,
ganhando em média M dólares por dia. Ao final do ano, Ivan recebe um bônus equivalente a 2,5
salários mensais. Impostos de 25% são deduzidos de seus ganhos durante o ano. Escreva um
programa para calcular o lucro líquido médio de Ivan por dia em BGN, já que ele gasta seus
ganhos na Bulgária. Supõe-se que o ano tenha exatamente 365 dias. A taxa de câmbio do dólar
em relação ao leva será
lê do console.
Dados de entrada
3 números são lidos no console:
• Na primeira linha – dias úteis do mês. Um número inteiro no intervalo [5 … 30]. • Na segunda
2.000,00].
• Na terceira linha – a taxa de câmbio do dólar contra o leva /1 dólar = X leva/. Realisticamente
Dados de saída
1 número deve ser impresso no console - o lucro médio por dia em BGN. Formate o resultado para
o segundo dígito após o ponto decimal.
21 15 22
75,00 74,61 105 80,24 199,99 196,63
1,59 1,71 1,50
Explicação:
• 1 salário mensal = 21 *
75 = $ 1575.
• Rendimento anual = 1575 • * *
12 + 1575 2,5 = 22837,5 dólares.
Imposto = 25% de 22837,5 = 5709,375 BGN. • Lucro
líquido anual = 17.128,125 dólares = 27233,71875 BGN. • Lucro médio por dia
Diretrizes e dicas
Primeiro, vamos analisar a tarefa e descobrir como resolvê-la. Em seguida, escolheremos os tipos
de dados e, finalmente, escreveremos o código da solução.
Ideia de solução
Machine Translated by Google
Vamos primeiro calcular quanto é o salário mensal de Ivan. Faremos isso multiplicando
os dias úteis do mês pelo dinheiro que ele ganha por dia. Multiplicamos o resultado
resultante primeiro por 12 para calcular quanto é o salário dele por 12 meses e depois
por 2,5 para calcular o bônus. Somando os dois valores obtidos, calcularemos sua renda
anual total. Temos que subtrair 25% disso. Podemos fazer isso multiplicando a renda
total por 0,25 e subtraindo o resultado dela. Com base em nossa taxa de câmbio,
convertemos dólares em
BGN, então dividimos o resultado pelos dias do ano, que supomos serem 365.
Escolhendo os tipos de
dados Os dias úteis de um mês são dados como um número inteiro, portanto podemos
declarar uma variável do tipo int para o seu valor. Para o dinheiro ganho, assim como
para a cotação do dólar em relação ao leva, obteremos um número real, portanto usamos
o dobro para eles. Como double é o tipo de dados de escopo maior e o valor de saída
também requer um número real (com um número inteiro e uma parte fracionária), vamos
usá-lo para o restante das variáveis que criamos.
Responder
Novamente: uma vez que tenhamos uma ideia de como resolver o problema e tenhamos
pensado nos tipos de dados com os quais trabalharemos, passamos a escrever o
programa. Assim como nas tarefas anteriores, podemos dividir a solução em três subtarefas:
• Leia os dados de entrada.
• Efetue os cálculos.
• Saída para o console.
Declaramos as variáveis que usaremos, novamente tomando cuidado para escolher os
nomes apropriados. Com scanner.nextLine() , lemos os números passados no console
e convertemos a string inserida pelo usuário em um int ou double com Integer/
Double.parseInt/Double(…).
Realizamos os cálculos:
Machine Translated by Google
Poderíamos escrever a expressão com a qual calculamos a renda anual total sem os parênteses. Como a
multiplicação é uma operação de prioridade mais alta do que a adição, ela será executada primeiro. No entanto,
recomenda-se escrever parênteses,
quando usamos mais declarações porque torna o código mais fácil de ler e
a possibilidade de errar é menor.
Por fim, resta enviar o resultado para o console. Notamos que é necessário formatar o valor numérico para a
segunda vírgula decimal. Para isso, podemos usar especificadores de formatação, ou seja, local que será substituído
por um valor específico quando impresso. Em Java, um % seguido de uma letra especificada (especificador) é
usado para uma string de formato. Podemos formatar um número inteiro ou fracionário com os especificadores F/f
ou D/d. É seguido por um número inteiro positivo indicando o número de dígitos após o ponto decimal. Você pode
ler mais sobre formatação no livro "Introduction to Java Programming" (páginas 137-143). Obtemos o resultado final
assim:
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=cXKIVmjEgHw.
Comparando números
Na programação, podemos comparar valores usando os seguintes operadores:
• Operador < (menor que) •
Operador > (maior que)
• Operador <= (menor ou igual a) • Operador
>= (maior ou igual a) • Operador == (igual a)
• Operador != (diferente)
Em uma comparação, o resultado é um valor booliano — verdadeiro ou falso, dependendo se o
resultado da comparação é verdadeiro ou falso.
Operadores de comparação
Na linguagem Java, podemos usar os seguintes operadores para comparar números:
Machine Translated by Google
Operador Significado
==
verificação de igualdade
Verifique a diferença !=
Maior >
Menos <
perdoar cheques
Na programação, frequentemente verificamos determinadas condições e executamos diferentes ações com
base no resultado da verificação. Isso é feito através da verificação if which
tem a seguinte construção:
if (expressão booleana) { //
corpo da construção condicional, // que só será
executada se a expressão booleana for verdadeira;
}
Teste o código de exemplo localmente. Tente inserir pontuações diferentes, por exemplo, 4,75, 5,49, 5,50 e
6,00. Para pontuações menores que 5,50, o programa não produzirá nada e, para pontuações de 5,50 ou
maiores, exibirá "Excelente!".
solução: https://judge.softuni.bg/Contests/Practice/Index/651#1.
É uma boa prática sempre colocar chaves porque torna nosso código mais legível e
organizado.
No exemplo abaixo, na última linha onde tentamos imprimir a variável salario, que está definida na
construção do if , teremos um erro porque não temos acesso a ela (caso a própria IDE nos avise sobre o
escopo da variável ).
Série de cheques
Às vezes, precisamos realizar uma série de verificações antes de decidir quais ações nosso programa
executará. Nesses casos, podemos aplicar a construção if-else if…-else em série. Para tanto, utilizamos
o seguinte formato:
Machine Translated by Google
if (condição) { //
corpo da construção condicional;
} senão if (condição2) {
// corpo de construção condicional;
} senão if (condição3) {
// corpo de construção condicional; } …
else { //
corpo da construção else;
}
if (num == 1)
{ System.out.println("um"); } else
if (num == 2)
{ System.out.println("dois"); }
senão se (…) {
…
} else if (num == 9)
{ System.out.println("nine"); } else
Um número inteiro é dado - número de pontos. Os pontos de bônus são acumulados de acordo
com as regras descritas abaixo. Escreva um programa que calcule os pontos de bônus para esse
número e o número total de pontos com os bônus.
• Se o número for até 100, inclusive, os pontos de bônus são 5.
• Se o número for maior que 100, os pontos de bônus são 20% do número. • Se o número
for maior que 1000, os pontos de bônus são 10% do número. • Pontos de bônus adicionais
37 270,3 1589,5
20 175 2703 15875
6 26 212 2973,3 17464,5
Diretrizes e dicas
Podemos calcular os pontos de bônus principais e adicionais com uma série de várias verificações
if-else-if-else . Quanto aos pontos de bónus principais, temos 3 casos (quando o número
introduzido for até 100, entre 100 e 1000 e superior a 1000), e para os pontos de bónus adicionais
- mais 2 casos (quando o número for par e ímpar) .
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/651#5.
35 22 50 14
45 2:04 1:03 50 2:29 12 0:36
44 7 34 49 10
Diretrizes e dicas
Podemos resolver a tarefa de várias maneiras. A primeira que combina com o tema é esta: primeiro
somamos os três números para obter o resultado total em segundos. Como 1 minuto = 60 segundos,
precisaremos calcular o número de minutos e o número de segundos no intervalo de 0 a 59:
• Se os segundos forem menores que 10, emitimos um zero à esquerda antes deles.
Machine Translated by Google
A segunda forma, que não utiliza construções if-else, é melhor porque pode ser utilizada
para grandes valores de tempos:
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/651#6.
12 150 450
km 39370.0788 milhas 9503999.99393599 0,41147999937455
pés em jardas km
nossos dados de entrada e, para ler as unidades, podemos adicionar a função toLowerCase(), que
tornará todas as letras minúsculas. Como podemos ver na tabela na condição, só podemos converter
entre metros e alguma outra unidade de medida. Portanto, devemos primeiro calcular o número a ser
convertido em metros. Portanto, precisamos fazer um conjunto de verificações para determinar qual é
a unidade de medida de entrada e, em seguida, para a unidade de medida de saída.
Machine Translated by Google
O que é "depuração"?
A depuração é o processo de "enganchar" a execução do programa, o que nos permite rastrear passo
a passo todo o processo de execução. Podemos acompanhar linha por linha o que acontece com
nosso programa, que caminho ele segue, que valores têm as variáveis definidas em cada passo do
debugging, e muitas outras coisas que nos permitem encontrar erros (bugs).
É assim que a tela do depurador do IntelliJ IDEA fica quando o programa parou em um ponto de
interrupção e permite visualizar os valores atuais de todos
variáveis:
Machine Translated by Google
[Project].
Selecionamos Java no painel esquerdo sem marcar mais nada e pressionamos [Avançar]. Na próxima
caixa de diálogo, temos várias opções, uma das quais é sim
Machine Translated by Google
O ConsoleApp está configurado. Normalmente é isso que faremos, mas não podemos
marcar nada e clicar em [Avançar] novamente.
A primeira tarefa de exercício para este tópico é escrever um programa de console que insere
uma nota (um número decimal) e imprime "Excelente!" se a nota for 5,50 ou superior.
Abre-se uma caixa de diálogo com 2 campos - no superior inserimos o nome da turma, e no
inferior - o tipo (existem outras opções além das turmas, mas para os próximos capítulos),
então criamos o aula. Definimos um nome, por exemplo "Avaliações":
Machine Translated by Google
Agora temos uma classe com um aplicativo de console. Resta escrever o código para
resolver a tarefa.
Para fazer isso, vamos ao corpo do método main(string[] args) e colocamos o cursor
entre as chaves de abertura e fechamento do método. Se o método principal não for
criado automaticamente no IntelliJ Idea, existe um atalho de teclado que o faz - psvm.
Dentro do método escrevemos o seguinte código:
Iniciamos o programa a partir da seta verde na frente do nome da classe para testá-lo
com diferentes valores de entrada:
Diretrizes e dicas
Criamos uma nova classe no projeto existente no IntelliJ Idea clicando ,com o botão direito do
mouse na pasta [src]. Selecionamos [Novo] ÿ [Classe Java].
Precisamos escrever o código do programa. Podemos ajudar com o código de exemplo da imagem:
Agora rodamos o programa normalmente com a seta verde e testamos para ver se funciona
corretamente:
Machine Translated by Google
Diretrizes e dicas
Criamos uma nova classe no projeto existente no IntelliJ Idea clicando com o botão
direito do mouse na pasta [src]. Escolhemos [Novo] ÿ [Classe Java]:
No método public static void main() , precisamos escrever o código do programa. A
verificação se um determinado número é par pode ser implementada com o operador %,
que retornará o resto quando um inteiro for dividido por 2 da seguinte forma: boolean
isEven = (number %2 == 0);.
Resta executar o programa e testá-lo:
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/651#2.
3 10 -5
5 5 10 5
53 5 10 5
uma nova classe no projeto existente no IntelliJ Idea clicando com o botão direito do mouse na pasta [src].
Selecionamos [Novo] ÿ [Classe Java]. Para o código do programa, precisamos de uma única construção if-
else . Você pode se ajudar parcialmente com o código da imagem, que é deliberadamente ofuscado, para
pensar em como completá-lo você mesmo:
solução: https://judge.softuni.bg/Contests/Practice/Index/651#3.
Machine Translated by Google
Diretrizes e dicas
Podemos usar uma série de instruções if-else para considerar os 11 casos possíveis.
Senha
qwerty s3cr3t!P@ssw0rd Bem vindo s3cr3t!p@ss Senha errada!
incorreta!
Diretrizes e dicas
Use a construção if-else .
95 Menos de 100 120 Entre 100 e 200 210 Maior que 200
O tipo de figura (quadrado, retângulo, círculo, triângulo) é lido na primeira linha da entrada.
• Se a figura for um retângulo, dois números são lidos nas próximas duas linhas –
os comprimentos de seus lados.
• Se a figura for um círculo, um número é lido na próxima linha - o raio de
o circulo.
• Se a figura for um triângulo, dois números são lidos nas próximas duas linhas –
o comprimento de seu lado e o comprimento de sua altura a ele.
retângulo triângulo
quadrado círculo
25 7 17.5 113.097 4.5 45
5 6
2.5 20
solução: https://judge.softuni.bg/Contests/Practice/Index/651#12.
23 11
2:01 0:16 0:14 11:23
1 46 0 01 59 08
Diretrizes e dicas
Adicione 15 minutos e faça algumas verificações. Se os minutos excederem 59, aumente as horas em
1 e diminua os minutos em 60. Da mesma forma, considere o caso quando as horas excederem 23.
Ao imprimir os minutos, verifique se há um zero à esquerda.
solução: https://judge.softuni.bg/Contests/Practice/Index/651#13.
5 5 1
5 sim 4 não 2 não
5 5 3
solução: https://judge.softuni.bg/Contests/Practice/Index/651#14.
*
Tarefa: escreva um número de 0 a 100 em palavras
Escrever um programa que converta um número no intervalo [0 … 100] em texto.
Diretrizes e dicas
Verifique primeiro os números de um dígito e, se o número for de um único dígito, imprima a palavra
correspondente a ele. Em seguida, verifique se há números de dois dígitos. Eles
Machine Translated by Google
imprima em duas partes: parte esquerda (dezenas = o número / 10) e parte direita
(unidades = o número % 10). Se o número tiver 3 dígitos, deve ser 100 e pode ser
considerado um caso especial.
if (expressão booleana) { //
corpo de construção condicional; } else { // corpo
do else-
construct;
}
• cláusula if •
Tarefas de exame
Agora que lembramos como escrever instruções condicionais, vamos resolver alguns problemas para
obter experiência prática com a instrução if-else .
• Taxas. Taxa inicial: BGN 0,70 Tarifa diária: BGN 0,79/km. Tarifa noturna:
BGN 0,90/km.
• Ônibus. Tarifa diurna/noturna: BGN 0,09/km. Pode ser usado para espaçamento
pelo menos 20 km.
• Trem. Tarifa diurna/noturna: BGN 0,06/km. Pode ser usado para distâncias de pelo menos 100 km.
Escreva um programa que insira o número de quilômetros n e a hora do dia (dia ou noite) e calcule o custo
do transporte mais barato.
Machine Translated by Google
Dados de entrada
Duas linhas são lidas do console:
• A segunda linha contém a palavra "dia" ou "noite" – viajar durante o dia ou através
a noite.
Dados de saída
Para imprimir no console o preço mais baixo para o número de quilômetros especificado.
25 180
4,65 7 2.25 10.8
5 dias 7 noites dias noites
Diretrizes e dicas
Faremos a leitura dos dados inseridos e dependendo da distância escolheremos o transporte mais
barato. Para isso, usaremos várias verificações.
Para a primeira linha, é mencionado que contém um número inteiro, portanto a variável que será declarada
é do tipo int. Para a segunda linha, a indicação é que contém uma palavra, respectivamente, a variável é
do tipo String.
Antes de iniciarmos as verificações, precisamos declarar uma variável na qual armazenaremos o valor do
preço do transporte.
Fica claro pela condição que as tarifas de dois dos veículos não dependem de ser dia ou
noite, mas a tarifa do terceiro transporte (táxi) sim. neste
pois a primeira checagem será se é dia ou noite, para deixar claro qual tarifa de táxi será
utilizada. Para tanto, declaramos outra variável na qual armazenaremos o valor da tarifa
do táxi.
Para calcular a tarifa do táxi, usaremos uma verificação if-else e, por meio dela, será
atribuído um valor à variável da tarifa do táxi.
Feito isso, podemos agora proceder ao cálculo do preço real do transporte. As restrições
que estão presentes na condição da tarefa são sobre a distância que o aluno deseja
percorrer. Por esse motivo, construiremos uma construção if-else , com a ajuda da qual
encontraremos o preço
para o transporte em função dos quilómetros apresentados.
Primeiro, verificamos se os quilômetros estão abaixo de 20, pois fica claro na condição
que abaixo de 20 quilômetros o aluno só pode usar táxis. Se a condição de verificação
for verdadeira (devolve verdadeiro), será atribuído o valor correspondente à variável que
foi criada para conter o valor do preço de transporte (preço) . Esse valor é igual à taxa
inicial que cobramos com aquela tarifa multiplicada pela distância que o aluno tem que
percorrer.
Se a condição da variável não for verdadeira (ela retorna falso), o próximo passo é nosso
programa verificar se os quilômetros estão abaixo de 100. Fazemos isso porque fica claro
pela condição que nesta faixa um ônibus também pode ser utilizado como meio de
transporte. O preço por quilômetro do ônibus é menor que o do táxi. Portanto, se o
resultado da verificação for verdadeiro, então no corpo do bloco else if, devemos atribuir
um valor igual ao resultado da multiplicação da tarifa do ônibus pela distância até a
variável preço do transporte (preço) .
Se esta verificação não retornar true como resultado, ela permanecerá no outro corpo
da variável de preço para atribuir um valor igual ao resultado da multiplicação
Machine Translated by Google
a distância de acordo com a tarifa do trem. Isso é feito porque o trem é a opção de
transporte mais barata para determinada distância.
Dados de entrada
Quatro linhas são lidas no console:
• A primeira linha contém o número V - volume da piscina em litros - um inteiro no intervalo [1
… 10000].
• A segunda linha contém o número P1 - vazão do primeiro tubo por hora - inteiro
número no intervalo [1 ... 5000].
• A terceira linha contém o número P2 - vazão do segundo tubo por hora - inteiro
número no intervalo [1 ... 5000].
• A quarta linha contém o número H - as horas em que o trabalhador está ausente
– um número de ponto flutuante no intervalo [1,0 … 24,00].
Dados de saída
Para imprimir no console um dos dois estados possíveis:
• Quanto a piscina encheu e qual tubo contribuiu com qual porcentagem. Para todas as
porcentagens, pegue apenas a parte inteira (isto é, arredonde para baixo).
1000 100
100 A piscina está 66% cheia. Tubo 100 Por 2,5 horas a piscina
120 1: 45%. Tubo2: 54%. 100 transborda com 400 litros.
3 2,5
Diretrizes e dicas
Para resolver o problema, vamos ler a entrada, realizar algumas verificações e cálculos e imprimir o
resultado.
condição do problema, vemos que nosso programa deve ter quatro linhas das quais lemos os dados
de entrada. Através dos três primeiros estaremos inserindo números inteiros e por este motivo as
variáveis nas quais armazenaremos os valores serão do tipo int. Para a quarta linha, somos
informados de que será um número de ponto flutuante, portanto, a variável que usaremos também é
do tipo double.
Nosso próximo passo é declarar e inicializar uma variável na qual calcularemos quantos litros a
piscina encheu durante a ausência do trabalhador. Faremos os cálculos somando os valores da vazão
dos dois tubos e multiplicando-os pelas horas que nos foram dadas como entrada.
Faremos isso com uma simples verificação if-else , na qual a condição será se a quantidade de água
é menor que o volume da piscina. Se a verificação retornar verdadeiro, então
Machine Translated by Google
precisamos imprimir uma linha que contenha a relação entre a quantidade de água que
passou pelos canos e o volume da piscina, e a relação entre a quantidade de água de
cada cano e o volume da piscina.
Exemplo: 20 dias de folga ÿ dias úteis são 345 (365 – 20 = 345). O tempo real de reprodução é de
24.275 minutos (345 * 63 + 20 * 127). A diferença da norma é de 5.725 minutos (30.000 – 24.275 =
5.725) ou 95 horas e 25 minutos.
Dados de entrada
A entrada é lida no console e consiste em um único inteiro - o número de dias de folga no intervalo [0
… 365].
Dados de saída
Duas linhas devem ser impressas no console.
• Se o tempo de jogo de Tom estiver acima da norma para o ano atual:
o Na primeira linha, escreva: "Tom vai fugir". o Na segunda
linha, imprima a diferença da norma no formato: "{H} horas
e {M} minutos a mais para jogar".
• Se o tempo de jogo de Tom estiver abaixo do esperado para o ano atual:
o Na primeira linha, escreva: "Tom dorme bem". o Na
segunda linha, imprima a diferença da norma no formato: "{H} horas
e {M} minutos a menos para jogar".
Diretrizes e dicas
Para resolver o problema, vamos ler a entrada, realizar algumas verificações e cálculos e imprimir o
resultado.
tarefa, vemos que os dados de entrada serão lidos de apenas uma linha, que conterá em si um número
inteiro no intervalo [0 … 365]. Por esse motivo, usaremos uma variável do tipo int.
Machine Translated by Google
Para resolver o problema, primeiro precisamos calcular quantos minutos totais o dono do Tom joga com
ele. Pela condição vemos que, além dos fins de semana, o gato cinza sonolento também deve brincar
nos dias úteis para seu dono. o número que
lemos no console, são os fins de semana.
Nosso próximo passo é usar esse número para calcular quantos dias úteis o proprietário tem, pois sem
eles não podemos chegar ao total de minutos de jogo. Se o número total de dias no ano for 365 e o
número de feriados for X, isso significa que o número de dias úteis é 365 - X. Vamos armazenar a
diferença em uma nova variável (workingDays) que usaremos apenas por este valor.
Agora que temos a quantidade de dias de jogo, podemos calcular o tempo de jogo de Tom em minutos.
O seu valor é igual ao resultado da multiplicação dos dias úteis por 63 minutos (na condição de que em
dias úteis o tempo de jogo seja de 63 minutos por dia) adicionado ao resultado da multiplicação dos fins-
de-semana por 127 minutos (na condição é definido que nos fins de semana, o tempo de jogo é de 127
minutos por dia).
Na condição da tarefa para a saída, vemos que precisaremos imprimir a diferença entre os dois valores
em horas e minutos. Para isso, subtrairemos a norma de 30.000 minutos do tempo total de jogo e
escreveremos a diferença resultante em uma nova variável. Em seguida, dividiremos essa variável inteira
por 60 para obter as horas e, para encontrar os minutos, usaremos a divisão modular com o operador % ,
dividindo a variável de diferença por 60 novamente.
Devemos observar aqui que, se o tempo de jogo resultante de Tom for menor que 30.000, subtrair a
norma resultará em um número com sinal negativo. Para neutralizar o sinal nas duas divisões depois,
vamos matemática.
nós usamos método
abs(…) ao encontrar a diferença.
Fazendo verificações
O tempo de brincadeira já foi calculado, o que nos leva ao próximo passo – comparar o tempo de
brincadeira de Tom com a norma que determina se o gato consegue dormir bem. Para fazer isso,
usaremos uma verificação if-else e, na cláusula if , verificaremos se o tempo de jogo é maior que 30.000
(a norma).
Machine Translated by Google
Tarefa: colheita
De uma vinha com uma área de X metros quadrados, 40% da colheita é destinada à
produção de vinho. A partir de 1 m2. vinha produz Y quilogramas de uvas. São necessários
2,5 kg para 1 litro de vinho. uvas. A quantidade desejada de
vinho a ser vendida é Z litros. Escreva um programa que calcule quanto vinho pode ser
produzido e se essa quantidade é suficiente. Se sobrar, o restante é dividido igualmente
entre os trabalhadores da vinha.
Dados de entrada
A entrada é lida do console e consiste em exatamente 4 linhas:
• 1ª linha: X m2 é a vinha - um inteiro no intervalo [10 … 5000]. • 2ª fila: Y uvas
para um m2. – um número real no intervalo [0,00 … 10,00]. • 3ª linha: Z litros de vinho
necessários – um inteiro no intervalo [1 … 600]. • 4ª linha: número de trabalhadores
– um inteiro no intervalo [1 … 20].
Dados de saída
O seguinte deve ser impresso no console:
• Se o vinho produzido for inferior ao necessário:
Machine Translated by Google
o "{Vinho restante} litros restantes -> {vinho para 1 trabalhador} litros por pessoa."
*
Ambos os resultados devem ser arredondados para o inteiro superior
número.
Diretrizes e dicas
Para resolver o problema, vamos ler a entrada, realizar algumas verificações e cálculos e imprimir o
resultado.
Para resolver a tarefa, precisamos calcular quantos litros de vinho obteremos com base nos dados de
entrada. Da condição do problema, vemos que para calcular a quantidade de vinho em litros, devemos
primeiro descobrir qual é a quantidade de uvas em quilogramas que se obterá dessa safra. Para o efeito,
declararemos uma variável à qual atribuiremos um valor igual a 40% do resultado da multiplicação da área
da vinha e da quantidade de uvas de 1 m2. Feitos estes cálculos, estão prontos para calcular a quantidade
de vinho também em litros que será obtida desta safra. Para este propósito dekla
criamos mais uma variável na qual iremos armazenar esta quantidade, e a partir da condição
chegamos à conclusão de que, para calculá-lo, precisamos dividir a quantidade de uvas em quilos por 2,5.
Machine Translated by Google
Se a verificação retornar true, vemos pela condição da tarefa que na primeira linha
precisamos imprimir o vinho que recebemos da colheita. Para impor a condição de que
esse valor seja arredondado para o menor número inteiro, usaremos o método
Math.floor(…) ao imprimi-lo por meio de um especificador de formato. Na segunda linha,
há a exigência
de imprimir os resultados arredondando-os para o maior inteiro, o que faremos com o
método Math.ceil(…). Os valores que precisamos imprimir são a quantidade restante
de vinho e a quantidade de vinho que cai por trabalhador. A quantidade restante de vinho
é igual à diferença entre os litros de vinho recebidos e os litros de vinho necessários.
Vamos calcular o valor dessa quantidade em uma nova variável que vamos declarar e
inicializar no bloco if body antes de imprimir a primeira linha. Calcularemos a quantidade
de vinho por trabalhador dividindo o vinho restante pelo número de trabalhadores.
Tarefa: empresa
Uma empresa recebe uma solicitação para o desenvolvimento de um projeto que requer um determinado número
de horas. A empresa tem um certo número de dias. Durante 10% dos dias, os funcionários estão em treinamento e
não podem trabalhar no projeto. Um dia normal de trabalho na empresa é de 8 horas. O projeto é importante para a
empresa e todo funcionário deve trabalhar no projeto fora do horário de trabalho por 2 horas por dia. As horas devem
ser arredondadas para um número inteiro inferior (por exemplo, ÿ 6,98 horas são arredondadas para 6
horas).
Escreva um programa que calcule se a empresa pode concluir o projeto no prazo e quantas horas faltam ou faltam.
Dados de entrada
A entrada é lida do console e contém exatamente 3 linhas:
Dados de saída
Para imprimir uma linha no console:
90 99
7 Sim! 2 horas restantes. 3 Não há tempo suficiente! 72 horas necessárias.
3 1
Machine Translated by Google
Diretrizes e dicas
Para resolver o problema, vamos ler a entrada, realizar algumas verificações e cálculos
e imprimir o resultado.
Cálculos auxiliares O
próximo passo é calcular a quantidade de horas de trabalho multiplicando os dias úteis
por 8 (todos os dias são trabalhados 8 horas) pelo número de trabalhadores e somando-
os ao tempo livre. Os dias úteis correspondem a 90% dos dias à disposição da empresa.
A hora extra é igual ao resultado da multiplicação do número de funcionários por 2 (as
horas extras possíveis), que também é multiplicado pelo número de dias à disposição da
empresa. A partir da condição de atribuição, vemos que existe a condição de que as
horas sejam arredondadas para um inteiro menor, o que faremos com o método
Math.floor(…).
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=1ZXBO_fCZ4w.
Cheques aninhados
Muitas vezes, a lógica do programa requer o uso de construções if ou if-else que estão contidas umas
nas outras. Estes são chamados de instruções if ou if else aninhadas. Como o nome "aninhado"
indica, são instruções if ou if-else que são colocadas dentro de outras instruções if ou else .
if (condição1) { if
(condição2) { // corpo; }
else { //
corpo;
}
}
Aninhar mais de três construções condicionais uma dentro da outra não é considerado uma boa prática
e deve ser evitado, principalmente otimizando a estrutura/algoritmo do código e/ou usando outro tipo
de construção condicional, que discutiremos a seguir. .
12 17 25 13.5
Perder Senhor. EM. Mestre
f m f m
Machine Translated by Google
Responder
Podemos notar que a saída do programa depende de várias coisas. Primeiro, precisamos verificar o gênero inserido
e, em seguida, verificar a idade. Assim, usaremos vários blocos if-else . Esses blocos serão
aninhado, ou seja a partir do resultado da primeira determinaremos qual das outras executar.
solução: https://judge.softuni.bg/Contests/Practice/Index/653#0.
Por cidade dada (string), produto (string) e quantidade (número decimal) sim
calcular o preço.
Responder
Colocamos todas as letras em minúsculas com a função .toLowerCase() para comparar produtos e
cidades sem diferenciar maiúsculas de minúsculas.
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/653#1.
E Lógico
Como vimos, em algumas tarefas precisamos fazer muitas verificações ao mesmo tempo. Mas o que acontece
quando, para executar algum código, várias condições devem ser atendidas e não queremos fazer uma negação
(else) para cada uma delas? A opção com blocos if aninhados é válida, mas o código pareceria muito confuso e
certamente difícil de ler e manter.
Um "AND" lógico (operador && ) significa que várias condições são atendidas simultaneamente. A seguinte
tabela verdade se aplica:
a b a && b
verdadeiro
verdadeiro
falso
falso verdadeiro
verdadeiro falso verdadeiro falso
falso falso falso
Exemplo:
booleano a = verdadeiro;
booleano b = verdadeiro;
booleano c = falso; booleano
d = verdadeiro; resultado
booleano = a && b && c && d; // false (que d não verifica)
Machine Translated by Google
O programa será executado da seguinte maneira: começa a verificar a partir de a, lê e informa que é
verdadeiro e, em seguida, verifica b. Depois de determinar que a e b retornam verdadeiro, ele
verifica o próximo argumento. Ele atinge c e informa que a variável tem o valor false. Uma vez que o
programa detecta que o argumento c tem o valor false, ele avalia a expressão até c,
independentemente do valor de d. Para isso, a verificação de d é ignorada e toda a expressão é
avaliada como falsa.
2
-3
12
Dentro
3
8
-1
Responder
https://judge.softuni.bg/Contests/Practice/Index/653#2.
"OU" lógico
Um OR lógico (operador ||) significa que pelo menos uma das várias condições foi atendida. Como o operador &&, o OR
lógico aceita vários argumentos booleanos (condicionais) e retorna verdadeiro ou falso. Podemos adivinhar facilmente que
nos tornamos verdadeiros sempre que pelo menos um dos argumentos for verdadeiro. Um exemplo típico da lógica desse
operador é
a seguir:
Na escola, a professora diz: "Deixa o Ivan ou o Pedro lavar o quadro-negro". Para que esta condição seja cumprida (a tábua
ser lavada), é possível que apenas Ivan lave, apenas Peter lave, ou ambos o façam.
a b um || b
verdadeiro verdadeiro
booleano c = falso;
booleano d = verdadeiro;
resultado booleano = a || b || c || d; // verdadeiro (já
que c e d não são verificados)
O programa verifica a, relata que tem um valor false e continua. Chegando em b, ele informa que tem
valor true e toda a expressão avalia true sem checar c e d pois seus valores não mudariam o resultado
de
expressões.
Conecte-se Saída
banana fruta
tomate vegetal
java desconhecido
Responder
solução: https://judge.softuni.bg/Contests/Practice/Index/653#3.
negação lógica
Uma negação lógica (operador !) significa que uma determinada condição não foi cumprida.
a !a
verdadeiro falso
O operador ! recebe uma variável booleana como argumento e retorna seu valor.
Entrada Saída
75 inválido
220 inválido
Responder
Testando a solução
Teste sua solução: https://judge.softuni.bg/Contests/Practice/Index/653#4.
O operador parênteses ()
Machine Translated by Google
2
2 -3
-3 12
Fronteira Dentro fora
3
12 8
3 12 -1 -1
Responder
solução: https://judge.softuni.bg/Contests/Practice/Index/653#5.
Escreva um programa que leia no console a fruta (banana/maçã/…), dia da semana (segunda/terça/…)
e quantidade (número decimal) e calcule o preço de acordo com os preços das tabelas acima. Imprima
o resultado arredondado para 2 casas decimais. Para um dia da semana inválido ou um nome de fruta
inválido, imprima "erro".
Responder
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/653#6.
Cidade 0 <= s <= 500 500 < s <= 1000 1000 < s <= 10000 s > 10000
Sofia 5% 7% 8% 12%
Varna 4,5% 7,5% 10% 13%
Plovdiv 5,5% 8% 12% 14,5%
Escreva um programa que leia o nome de uma cidade (uma string) e um volume de vendas (um número
decimal) e calcule o valor da comissão. O resultado deve ser arredondado para 2 casas decimais após
a vírgula. Cidade ou volume de vendas inválido (número negativo) para imprimir "erro".
Responder
Ao ler a entrada, podemos converter a cidade para letras minúsculas (com a função .toLowerCase()).
Inicialmente definimos a comissão como -1. Ela vai ser
Machine Translated by Google
alterado se a cidade e a faixa de preço forem encontradas na tabela de comissões. Para calcular a
comissão com base na cidade e no volume de vendas, precisamos de algumas verificações if aninhadas ,
como no exemplo de código abaixo:
solução: https://judge.softuni.bg/Contests/Practice/Index/653#7.
É uma boa prática usar blocos que cercamos com chaves { } depois de if e else. Além
disso, é recomendável recuar o código após if e else em uma tabulação ao escrever
para facilitar a leitura do código.
A variável que queremos comparar é colocada entre parênteses após a instrução switch e é chamada de
"seletor". Aqui, o tipo deve ser comparável (números, strings). Sequencialmente, a comparação começa
com cada valor que segue as marcas de caso. Se houver uma correspondência, a execução do código
começa no local correspondente e continua até que a instrução break seja alcançada. Em algumas
linguagens de programação (como C# por exemplo) a presença de uma quebra é obrigatória para todos
os casos,
Machine Translated by Google
Conecte-se Saída
1 Segunda-
Feira
7 -1 Domingo Erro!
Responder
Machine Translated by Google
É uma boa prática colocar primeiro os casos que lidam com as situações que ocorrem com
mais frequência e deixar as construções de caso que lidam com situações que ocorrem
com menos frequência no final, antes da construção padrão . Outra boa prática é
organizar as tags de caso em ordem crescente, independentemente da importância
solução: https://judge.softuni.bg/Contests/Practice/Index/653#8.
interruptor (seletor) {
construção; quebrar
valor do
caso4 :
valor do caso5 :
construção; quebrar
…
padrão:
construção; quebrar
}
Machine Translated by Google
Responder
Podemos resolver o problema verificando o switch-case com vários rótulos da seguinte maneira:
solução: https://judge.softuni.bg/Contests/Practice/Index/653#9.
Cheques aninhados
if (condição1) {
Machine Translated by Google
if (condição2) { //
corpo; } else
{ // corpo;
}
}
interruptor (seletor) {
valor do caso1 :
construção;
quebrar
caso valor2: caso valor3:
construção; quebrar
…
padrão:
construção; quebrar
Tarefa: cinema
Em uma sala de cinema, as cadeiras são dispostas de forma retangular em r fileiras e c colunas.
Existem três tipos de sessões com bilhetes a preços diferentes:
• Estreia – exibição de estreia, ao preço de BGN 12,00. • Normal
– projeção padrão, ao preço de BGN 7,50. • Desconto – rastreio
de crianças, escolares e estudantes ao preço reduzido de 5,00
leva.
Escreva um programa que insira o tipo de triagem (string), o número de filas e o número de colunas no hall
(números inteiros) e calcule a receita total de ingressos na íntegra
Machine Translated by Google
salão. O resultado deve ser impresso no formato dos exemplos abaixo - com 2 dígitos após a
vírgula.
Estreia Normal
10 1440.00 leva 21 2047.50 leva
12 13
solução: https://judge.softuni.bg/Contests/Practice/Index/653#10.
Tarefa: vôlei
Vladi é estudante, mora em Sofia e vai para sua cidade natal de vez em quando. Ele é muito apaixonado
por vôlei, mas fica ocupado durante a semana e só joga vôlei nos finais de semana e feriados. Vladi
joga em Sofia todos os sábados, quando não está trabalhando e viajando para sua cidade natal, bem
como em 2/3 dos feriados. Ele viaja para sua cidade natal h vezes por ano, onde joga vôlei com seus
velhos amigos aos domingos. Vladi não está no trabalho 3/4 dos fins de semana em que está em Sofia.
Separadamente, durante os anos bissextos, Vladi joga 15% mais vôlei do que o normal. Assumimos
que há exatamente 48 fins de semana adequados para o voleibol no ano. Escreva um programa que
calcule quantas vezes Vlady jogou vôlei durante o ano. Arredonde o resultado para o número inteiro
mais próximo (por exemplo, 2,15 -> 2; 9,95 -> 9).
Diretrizes e dicas
Por padrão, lemos os dados de entrada do console e, para evitar erros de digitação, convertemos o
texto em letras minúsculas com a função .toLowerCase(). Calculamos consistentemente os fins de
semana passados em Sofia, o tempo de jogo em Sofia e o tempo total de jogo. Por fim, verificamos se
o ano é bissexto, fazemos cálculos adicionais se necessário e exibimos o resultado no console
arredondado para o inteiro mais próximo (procure uma classe Java com essa funcionalidade na Internet).
Exemplo de código (partes do código estão ocultas para que você mesmo possa pensar nos detalhes):
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/653#11.
*
Tarefa: ponto na figura
*
Uma figura consiste em 6 blocos de tamanho hh, dispostos como na
figura. O canto inferior esquerdo do edifício está na posição {0, 0}. O
canto superior direito da figura está na posição {2*h, 4*h}. Na figura,
as coordenadas são dadas em h = 2.
2 2 2
fora 3 dentro 2 fronteira 6 fronteira
2 3 10 1 2 0
Machine Translated by Google
2 15 15 15
0 fora 13 fora 29 dentro 37 fora
6 55 37 18
parede.
solução: https://judge.softuni.bg/Contests/Practice/Index/653#12.
Machine Translated by Google
Cheques aninhados
if (condição1) { if
(condição2) { //
corpo; }
else { //
corpo;
}
}
interruptor (seletor) {
valor do caso1 :
construção;
quebrar
valor do caso2 :
projeto; quebrar;
padrão:
construção;
quebrar
}
Machine Translated by Google
• Seletor - uma expressão que avalia algum valor específico. O tipo de seletor pode ser um número
inteiro, string ou enum.
• Múltiplas tags case com comandos depois delas terminando com break.
Tarefas de exame
Agora que lembramos como as construções condicionais são usadas e como as construções
condicionais são aninhadas para implementar verificações e lógica de programa mais complexas,
vamos resolver alguns problemas de exame.
Escreva um programa que insira um horário de exame e um horário de chegada e imprima se o aluno
chegou no horário, adiantado ou atrasado e quantas horas ou minutos ele chegou adiantado ou
atrasado.
Dados de entrada
Quatro inteiros são lidos no console (um por linha):
• A primeira linha contém a hora do exame - um número inteiro de 0 a 23. • A
Dados de saída
Na primeira linha, imprima:
• "Atrasado" se o aluno chegar depois do horário do exame. • "On time", se o
Se o aluno chegar pelo menos um minuto depois do horário do exame, imprima na próxima linha:
• "mm minutos antes do início" para chegar com menos de uma hora de antecedência.
Machine Translated by Google
16
No horário 30
9 Atrasado 20 minutos 00 Cedo 1:00 horas 9
minutos antes do
após o início 15 antes do início
início
30 9 50 00 00 8 30
14 10
9 Atraso 1:30 horas 00 No horário 5 minutos 00
Na hora
00 após o início 13 antes do início 10
10 30 55 00
Diretrizes e dicas
É uma boa ideia ler a tarefa várias vezes, fazendo anotações e esboçando os exemplos
enquanto pensa sobre eles, antes de começar a escrever o código.
atribuição, esperamos receber quatro linhas consecutivas de inteiros diferentes. Observando os parâmetros
fornecidos, podemos definir o tipo int , pois ele satisfaz nossos valores esperados. Lemos simultaneamente a
entrada e analisamos o valor da string para o tipo de dados inteiro escolhido.
Olhando para a saída esperada, podemos criar variáveis para armazenar os diferentes tipos de dados de saída,
a fim de evitar o uso dos chamados "cordas mágicas" no código.
Machine Translated by Google
cálculos
Depois de ler a entrada, podemos começar a escrever a lógica para calcular o resultado. Vamos primeiro calcular
a hora de início do exame em minutos
para uma comparação mais fácil e precisa.
Resta-nos calcular a diferença nos dois tempos, para que possamos determinar
quando e a que horas em relação ao exame o aluno chegou.
Nosso próximo passo é fazer as verificações e cálculos necessários, finalmente gerando o resultado deles. Vamos
dividir a saída em duas partes:
• Primeiro, vamos mostrar quando o aluno chegou - se ele chegou adiantado, atrasado ou pontual. Para isso,
vamos nos concentrar na construção if-else .
Para economizar uma verificação adicional (senão), podemos assumir como padrão que o aluno está atrasado.
Então, de acordo com a condição, verificamos se a diferença de horário é superior a 30 minutos. Se for esse o caso,
assumimos que ele está ferido. Se não entrarmos na primeira condição, então devemos apenas verificar se a
diferença é menor ou igual a zero (<= 0), com a qual verificamos a condição de que o aluno veio de 0 a 30 minutos
antes do exame.
Em todos os outros casos, assumimos que o aluno está atrasado, o que é nosso padrão. Portanto, nenhuma
verificação adicional é necessária.
Para a final, temos que descobrir e mostrar com que diferença da hora do exame
o aluno chegou e se essa diferença indica um horário de chegada
antes ou depois do exame.
Machine Translated by Google
Verificamos se nossa diferença é maior que uma hora para exibir horas e minutos
respectivamente no formato desejado pela tarefa, ou menor que uma hora para exibir
apenas minutos como formato e descrição. Resta
fazer mais uma verificação - se o horário de chegada do aluno é antes ou depois do
início do exame.
De fato, para os propósitos da tarefa, a saída do resultado para o console pode ser feita
em um estágio anterior - já durante os próprios cálculos. Isso geralmente não é uma
prática muito boa. Por que?
Vamos considerar a ideia de que nosso código não tem 10 linhas, mas 100 ou 1000!
Algum dia, a saída do resultado precisará ser salva em um arquivo ou visualizada em
um aplicativo da Web, em vez de estar no console. Então, quantos lugares no código
terão que ser corrigidos por causa dessa mudança? E não vou perder um lugar?
Machine Translated by Google
Tarefa: jornada
Estranho, mas a maioria das pessoas planeja suas férias com antecedência. Um jovem programador
tem um determinado orçamento e tempo livre em uma determinada temporada.
Escreva um programa que aceite como entrada o orçamento e a temporada, e como saídas onde o
programador vai descansar e quanto vai gastar.
O orçamento determina o destino e a temporada determina quanto do orçamento será gasto. Se for
verão, estarei acampando e no inverno - em um hotel. Se estiver na Europa, independentemente da
época, vai descansar num hotel. Cada parque de campismo ou hotel, consoante o destino, tem um
preço próprio que corresponde a uma determinada percentagem do orçamento:
Dados de entrada
A entrada é lida do console e consiste em duas linhas:
Dados de saída
Duas linhas devem ser impressas no console.
Machine Translated by Google
Diretrizes e dicas
Normalmente, como em outras tarefas, podemos dividir a solução em várias partes: ler a entrada,
calcular, imprimir o resultado.
a condição cuidadosamente, entendemos que esperamos duas linhas de dados de entrada. O primeiro
parâmetro é um número real, para o qual é bom escolher um tipo de variável apropriado. Para maior
precisão nos cálculos, vamos nos concentrar em BigDecimal como o tipo para o orçamento e para a
temporada - string.
Sempre considere que tipo de valor é passado nos dados de entrada, bem como
em que tipo esses dados devem ser convertidos para que as construções do
programa que você cria funcionem corretamente!
Exemplo: quando a tarefa exigir que você faça cálculos monetários, use BigDecimal para maior
precisão.
cálculos
Vamos criar e inicializar a lógica e os cálculos
variáveis.
Machine Translated by Google
Vamos escolher e criar o formato necessário para os dados de saída, que usaremos
posteriormente no código:
Sempre podemos inicializar um determinado valor de parâmetro e fazer apenas uma verificação.
Isso nos poupa um passo lógico.
Imprimir o resultado
Resta-nos exibir o resultado calculado no console:
Dados de entrada
3 linhas são lidas no console:
• N1 – um inteiro no intervalo [0 … 40.000]. • N2 –
um número inteiro no intervalo [0 … 40.000]. •
Operador – um símbolo entre: "+", "-", "*", "/", "%".
Dados de saída
Para imprimir uma linha no console:
• Se a operação for adição, subtração ou multiplicação: o "{N1}
{operador} {N2} = {resultado} – {par/ímpar}". • Se a
operação for divisão:
o "{N1} / {N2} = {resultado}" – o resultado é formatado para o segundo caractere após o
ponto decimal.
Machine Translated by Google
10 7
*
1 10 – 1 = 9 – ímpar 3 7 3 = 21 – ímpar
- *
10 7
*
12 10 + 12 = 22 – par 3 7 3 = 21 – ímpar
*
+
123 10
12 123/12 = 10,25 3 10 % 3 = 1
/ %
Diretrizes e dicas
A tarefa não é complicada, mas há algumas linhas de código para escrever.
a condição, entendemos que esperamos três linhas de dados de entrada. Nas duas primeiras linhas, recebemos
números inteiros (no intervalo indicado pela tarefa) e na terceira - um símbolo aritmético.
cálculos
Vamos criar e inicializar as variáveis necessárias para a lógica e os cálculos. Em um armazenaremos o resultado dos
cálculos e no outro usaremos para a saída final do programa.
Machine Translated by Google
Vamos colocar o resultado como um valor ao inicializar o parâmetro de saída . Portanto, podemos fazer apenas
uma verificação - se precisamos recalcular e substituir esse resultado.
Dependendo de qual abordagem escolhermos, nossa próxima verificação será um simples else ou um único if.
No corpo desta verificação, com verificações adicionais sobre como o resultado é calculado em relação ao
operador passado, podemos separar a lógica da estrutura do resultado esperado.
A partir da condição, podemos ver que para adição (+), subtração (-) ou multiplicação (*), o resultado esperado
tem a mesma estrutura: "{N1} {operador} {N2} = {resultado} – {par /odd}", enquanto para divisão (/) e para divisão
modular (%) o resultado tem
estrutura diferente.
Para verificações curtas e simples, como no exemplo acima para pares e ímpares, é
possível usar um operador ternário. Vamos considerar nossa possível verificação sem
um operador ternário.
Sem usar o operador ternário, o código é mais longo, mas fácil de ler:
Usando um operador ternário, o código fica bem mais curto, mas pode exigir um esforço
extra para ler e entender como lógica:
Um grupo de torcedores decidiu comprar ingressos para a Euro 2016. O preço do ingresso é
determinado de acordo com duas categorias:
Machine Translated by Google
a 9 – 60% do orçamento • De 10 a 24 –
orçamento
um programa para calcular se eles podem comprar ingressos para a categoria selecionada com o dinheiro
restante do orçamento, bem como quanto dinheiro sobrará ou precisará.
Dados de entrada
A entrada é lida do console e contém exatamente 3 linhas:
• Na primeira linha está o orçamento – um número real no intervalo [1 000,00 … 1 000
000,00.
Dados de saída
Para imprimir uma linha no console:
• Se o orçamento for suficiente:
o "Não há dinheiro suficiente! Você precisa de {M} leva." – onde M é a quantidade que não
alcançar.
Diretrizes e dicas
Vamos ler os dados de entrada e realizar os cálculos descritos na condição
da tarefa para verificar se o dinheiro será suficiente.
Para começar, vamos processar e armazenar os dados de entrada nas variáveis apropriadas:
cálculos
Vamos criar e inicializar as variáveis necessárias para os cálculos:
Desde os primeiros cálculos, precisamos entender que parte do orçamento teremos que reservar para o
transporte. Pela lógica desses cálculos, notamos que só importa o número de pessoas do grupo. Portanto,
faremos a divisão lógica de acordo com o número de torcedores.
A partir do segundo cálculo, precisamos descobrir qual valor precisaremos para comprar
ingressos para o grupo. De acordo com a condição, depende apenas do tipo de ingresso
que precisamos comprar.
Vamos usar uma construção condicional switch-case .
Para a saída do resultado, para nos salvar de outra verificação, assumimos que o grupo
padrão poderá ir para a Euro 2016.
Machine Translated by Google
Imprimindo o resultado
Finalmente, resta exibir o resultado calculado no console.
• Para estúdio, para mais de 14 noites em maio e outubro: 30% de desconto. • Para estúdio, para
mais de 14 noites em junho e setembro: 20% de desconto. • Para apartamento, para mais de 14
Dados de entrada
A entrada é lida no console e contém exatamente duas linhas:
• Na primeira linha está o mês - maio, junho, julho, agosto, setembro ou outubro. • Na
segunda linha está o número de dormidas - um inteiro no intervalo [0 ... 200].
Dados de saída
Para imprimir duas linhas no console:
Diretrizes e dicas
Vamos ler os dados de entrada e realizar os cálculos de acordo com a lista de preços descrita e as regras de desconto
e, finalmente, imprimir o resultado.
com o estado da tarefa, esperamos receber duas linhas de dados de entrada - na primeira linha o mês em que a
estadia está prevista e na segunda - o número de noites. Vamos processar e salvar os dados de entrada nos
parâmetros apropriados:
cálculos
Machine Translated by Google
Olhando novamente para a condição, notamos que nossa lógica principal depende do
mês que nos é dado, bem como do número de noites.
Em geral, existem diferentes abordagens e maneiras de fazer as verificações em questão,
mas vamos nos concentrar em uma construção condicional switch-case básica e, nos
diferentes blocos de casos , usaremos construções condicionais if e if-
else. Vamos começar com o primeiro grupo de meses: maio e outubro. Durante estes
dois meses, o preço da estadia é o mesmo para os dois tipos de alojamento - estúdio e
apartamento. Portanto, precisamos fazer uma verificação interna do número de noites
para recalcular o preço relevante (se necessário).
Depois de calcularmos quais são os preços relevantes e o valor final da estadia - vamos
enviar o resultado de forma formatada, tendo previamente escrito nas nossas variáveis
de saída - studioInfo e apartmentInfo.
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=MMLI-dGB3Ms.
Um loop começa com a instrução for e percorre todos os valores de uma determinada variável
em um determinado intervalo, por exemplo, todos os números de 1 a 10 inclusive, e para cada
valor executa uma série de comandos. Na declaração do
loop, um valor inicial e um valor final são definidos. O corpo do loop é colocado entre chaves { }
e é um bloco de um ou mais comandos. A figura abaixo mostra a estrutura de um loop for :
Na maioria dos casos, um loop for percorre de 1 a n (por exemplo, de 1 a 10). O objetivo do loop
é percorrer os números 1, 2, 3, … em sequência, cada um deles realizando alguma ação. n e para
No exemplo acima, a variável i assume valores de 1 a 10, e o valor atual é impresso no corpo do
loop. O loop é repetido 10 vezes e cada uma dessas repetições é chamada de "iteração".
Diretrizes e dicas
Podemos resolver o problema com um loop for, com o qual passamos a variável i pelos
números de 1 a 100 e os imprimimos no corpo do loop:
Tente você mesmo dominar a arte de usar o padrão de código de loop for no IntelliJ IDEA.
Diretrizes e dicas
Podemos resolver o problema combinando um loop for para percorrer os números de 1 a 1000 e
verificando se cada número termina em 7. Existem outras soluções, é claro, mas vamos resolver o
problema fazendo um loop + verificando:
saber que os loops for não funcionam apenas com números. Podemos resolver o problema fazendo
um loop for que passa por todas as letras do alfabeto latino sequencialmente:
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/655#2.
4
45
3
2 30 -60 -20 43
-10
10 20
-20 -30
7 11
999 0 0
1 999
Diretrizes e dicas
Podemos resolver o problema de somar números da seguinte maneira:
solução: https://judge.softuni.bg/Contests/Practice/Index/655#3.
4
45
3
2 100 20 -20 99
-10
100 99
20 -30
7 99
2
999 -1 -1
1 999
-2
inserimos um único número n (o número de números a serem inseridos). Definimos o máximo atual máximo
para um valor neutro inicial, por exemplo -10000000000000 (ou Integer.MIN_VALUE). Usando um loop for ,
através do qual iteramos n-1 vezes, lemos um número inteiro num. Se o número lido num for maior que o
max atual , atribuímos o valor de num a
Machine Translated by Google
a variável máx. Por fim, o maior número deve ser armazenado em max . Imprimimos no console.
solução: https://judge.softuni.bg/Contests/Practice/Index/655#4.
4
45
3
2 99 -30 -20 -20
-10
100 99
20 -30
7 99
Diretrizes e dicas
A tarefa é absolutamente análoga à anterior, apenas começando com um valor inicial neutro diferente.
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/655#5.
2 2
10 Sim, soma = 100 Não, diferença = 1
90 90
60 40 9 50 50
inserimos o número n, depois os primeiros n números (a metade esquerda) e os somamos. Continuamos inserindo
mais n números (a metade direita) e descobrimos sua soma também. Calculamos a diferença entre as somas
encontradas por valor absoluto: Math.abs(leftSum - rightSum). Se a diferença for 0, imprimimos "Sim" + o valor,
caso contrário - imprimimos "Não" + a diferença.
Machine Translated by Google
https://judge.softuni.bg/Contests/Practice/Index/655#6.
os exemplos abaixo.
4 4
3
10 3
Sim Não 5 Não
50 5
Soma = 70 Diferença = 1 8 Diferença = 2
60 1
1
20 -2
Machine Translated by Google
Direções e dicas
Entramos nos números um a um e calculamos as duas somas (dos números em
posições pares e dos números em posições ímpares). Como na tarefa anterior,
calculamos o valor absoluto da diferença e imprimimos o resultado ("Sim" + a soma se
a diferença for 0 ou "Não" + a diferença caso contrário).
+= é um operador de atribuição composto comumente usado, ele adiciona o valor do operando direito ao operando
esquerdo e atribui o resultado final ao operando esquerdo. C += A é equivalente a C = C + A.
a e eu o em
1 2 345
olá bambu
6 (e+o = 2+4 = 6) 9 (a+o+o = 1+4+4 = 9)
oi cerveja
3 (i = 3) 4 (e+e = 2+2 = 4)
Na próxima janela, selecione [OK] para criar a localização do Projeto, caso não tenhamos
criado anteriormente.
Para criar em nosso projeto um pacote que contenha todas as classes com as
soluções das tarefas do exercício, clicamos com o botão direito em [src], selecionamos
[Novo] -> [Pacote] e nomeamos as tarefas do pacote (com a primeira letra minúscula) .
Para criar uma nova classe para o primeiro exercício, clique com o botão direito nas
tarefas, selecione [New] -> [Java Class] e nomeie a classe Task_01 (com a primeira
letra maiúscula).
Machine Translated by Google
A cada exercício subseqüente, criamos uma nova aula, conforme descrito acima
maneira de criar uma classe.
7
3
4 3
1 Sim 3+4+1+2 1 Não
1 Soma = 12 + 1 + 1 = 12 1 Diferença = 8
|10 – (1 + 1)| = 8
2 10
12 1
Machine Translated by Google
4
3 3
6
1 Não 5 Não Sim
1
1 Diferença = 1 5 Diferença = 1 Soma = 6
2
1 1
3
Diretrizes e dicas
Precisamos calcular a soma de todos os elementos, encontrar o maior deles e verificar a condição de busca.
6
Soma Ímpar=9, OddSum=1,5, Soma Ímpar=1,
2
OddMin = 2, OddMin=1,5, OddMin = 1,
3 2
Máx=5, OddMax=1,5, 1 Máx=1,
5 1,5
EvenSum=8, EvenSum=-2,5, 1 EvenSum=0,
4 -2,5
EvenMin = 1, EvenMin=-2,5, EvenMin = Não,
2
EvenMax = 4 EvenMax=-2,5 EvenMax=Não
1
Diretrizes e dicas
Machine Translated by Google
A tarefa combina várias tarefas anteriores: encontrar o mínimo, o máximo e a soma, bem como processar os
elementos das posições pares e ímpares. Lembrar
você é eles.
Neste problema, é melhor trabalhar com números fracionários (não inteiros). A soma, o mínimo e o máximo
também são números fracionários. Devemos usar um valor inicial neutro ao encontrar o mínimo/máximo, por
exemplo 1000000000,0 e -1000000000,0. Se finalmente obtivermos o valor neutro, imprimimos “Não”.
solução: https://judge.softuni.bg/Contests/Practice/Index/655#10.
imprima a diferença máxima entre dois pares consecutivos no seguinte formato - "Não, maxdiff=..." + a diferença
máxima.
A entrada consiste em um número n seguido por 2*n inteiros, todos um por linha.
3
1 valores = {3, 4}
2 21
valores = {3, 3, 3} mesmos
0 Sim, valor = 3 2 Não, maxdiff=1 diferenças = {1} máx.
valores
3 2 diferença = 1
4 2
-1
2
valores = {10} um valor
-1 valores = {1, -1} 1
mesmos valores
2 Não, maxdiff=2 diferenças = {2} máx. 5 Sim, valor = 10
0 diferença = 2 5
-1
Machine Translated by Google
4
1
2 1
-1 3
-1 2
números de entrada em pares. Para cada par, calculamos sua soma. À medida que lemos os pares de entrada,
para cada par, exceto o primeiro, precisamos calcular a diferença com o anterior. Para isso, é necessário
armazenar em uma variável separada a soma do par anterior. Finalmente, encontramos a maior diferença entre
dois pares. Se for 0, imprimimos “Sim” + o valor, caso contrário - “Não” + a diferença.
solução: https://judge.softuni.bg/Contests/Practice/Index/655#11.
Valor de
Método e sua descrição
retorno
home() – move a tartaruga de volta para sua posição inicial, voltada para o
Tartaruga
norte
penDown() - Anexa uma caneta à tartaruga que deixa uma linha quando a
Tartaruga
tartaruga se move
Valor de
retorno Método e sua descrição
Tartaruga
direita (graus duplos) – gira a tartaruga para a direita (em graus)
Este código move e gira a tartaruga, que está inicialmente no centro da tela (no meio da
forma), e desenha um triângulo equilátero. você pode editá-lo
e brincar com ele.
Machine Translated by Google
Iniciamos o aplicativo com [Shift + F10]. Testamos para ver se funciona (pressione o botão [Draw] várias
vezes):
Agora podemos modificar e complicar o código da tartaruga adicionando o seguinte código ao nosso
método drawTriangle():
Iniciamos o aplicativo novamente com [Shift + F10]. Estamos testando se o novo funciona
programa tartaruga:
Machine Translated by Google
Agora nossa tartaruga desenha figuras mais complexas. Vamos escrever o código
para os outros dois botões também: o objetivo do botão [Reset] é deletar o gráfico
desenhado e posicionar a tartaruga em sua posição inicial, completamos o método
resetTurtle() com o seguinte código :
Dica: Repita
o seguinte 6 vezes em um loop:
• Rotação de 60 graus.
• Movimento para frente 100.
Criamos um novo botão e adicionamos um ActionListener a ele, que atribui a forma o novo
valor de enum :
*
Tarefa: desenhando uma estrela com a tartaruga
Adicione um botão [Star] que desenha uma estrela de 5 pontas como na figura
abaixo:
Machine Translated by Google
Dica:
Altere a cor: turtle.setPenColor(Color.green);.
Em um loop, repita o seguinte 5 vezes:
• Movimento para a frente
200. • Rotação 144 graus.
Tarefa: *
desenhando uma espiral com a tartaruga
Adicionar um botão [Spiral] que desenha uma espiral com 20 vértices conforme a figura
abaixo:
Dica:
Machine Translated by Google
*
Tarefa: desenhando um triângulo espiral com a tartaruga
Adicione um botão [Triângulo] que desenha três triângulos com 22 vértices cada como
na figura abaixo:
Machine Translated by Google
Dica:
Desenhe em um loop movendo para frente e girando. A cada passo, aumente o
comprimento do movimento para frente em 10 e gire 120 graus. Repetir 3
vezes para os três triângulos.
Se você tiver problemas com o projeto de amostra acima, pergunte no fórum SoftUni:
https://softuni.bg/forum.
Machine Translated by Google
Tarefas de exame
Vamos resolver alguns problemas com ciclos de exames no SoftUni.
Tarefa: histograma
Dados n inteiros no intervalo [1 … 1000]. Destes, algumas porcentagens p1 estão abaixo de 200,
as porcentagens p2 vão de 200 a 399, as porcentagens p3 vão de 400 a 599, as porcentagens p4
vão de 600 a 799 e as porcentagens p5 restantes vão de 800 e acima. Escrever um programa que
calcula e imprime as porcentagens p1, p2, p3, p4 e p5. Exemplo: temos
n = 20 e números: 53, 7, 56, 180, 450, 920, 12, 7, 150, 250, 680, 2, 600, 200, 800, 799, 199, 46,
128, 65. Obtemos a seguinte distribuição e visualização:
Machine Translated by Google
Número
Grupo Números Percentagem
números
*
400… 599 450 1 p3 = 1/20 100 = 5,00%
*
600… 799 680, 600, 799 3 p4 = 3/20 100 = 15,00%
*
ÿ 800 920, 800 2 p5 = 2/20 100 = 10,00%
Dados de entrada
A primeira linha da entrada contém o inteiro n (1 ÿ n ÿ 1000), que representa o número de linhas de
números que serão alimentados para nós. Nas próximas n linhas há um inteiro no intervalo [1 … 1000] -
os números nos quais o histograma deve ser calculado.
Dados de saída
Imprima no console um histograma de 5 linhas, cada uma contendo um número entre 0% e 100%,
formatado com duas casas decimais (por exemplo, 25,00%, 66,67%, 57,14%).
2
600 200
Machine Translated by Google
66,67% 4 75,00%
31 0,00% 53 0,00%
2 0,00% 7 0,00%
999 0,00% 56 0,00%
33,33% 999 25,00%
Diretrizes e dicas
Podemos dividir mentalmente o programa que resolve esse problema em três
peças:
passarmos à leitura dos dados de entrada propriamente ditos, devemos declarar as variáveis nas quais iremos
armazená-los. Isso significa escolher um tipo de dados apropriado e nomes apropriados para eles.
Machine Translated by Google
Se dividirmos por 100 (número, tipo int) ao invés de 100.0 (número, tipo double), será realizada a
chamada divisão inteira e somente a parte inteira da divisão será armazenada na variável, que não é o
resultado nós queremos. Por exemplo: 5/2 = 2 e 5/2,0 = 2,5. Com isso em mente, a fórmula para a
primeira variável
Isso parecerá assim:
Para deixar ainda mais claro o que está acontecendo, vejamos o seguinte exemplo:
Conecte-se Saída
66,67%
3
0,00%
0,00%
1
0,00%
2 999
33,33%
• i = 2 – lemos o número 999, que cai no último grupo (p5) por ser maior que 800, e aumentamos o
contador do grupo (cntP5) em 1.
Depois de ler os números no grupo p1 temos 2 números e no p5 temos 1 número. Nos outros grupos
não temos números. Aplicando a fórmula acima, calculamos as porcentagens de cada grupo. Se na
fórmula multiplicarmos por 100, em vez de 100,0, obteremos 66% para o grupo p1 e 33% para o grupo
p5 (não haverá parte fracionária).
imprimir os resultados obtidos. A condição diz que as porcentagens devem ter precisão de duas casas
decimais. Conseguiremos isso definindo o formato “%.2f%%” no método String.format(…) :
Machine Translated by Google
Dados de entrada
3 números são lidos no console, cada um em uma linha separada:
• Idade de Lily - um número inteiro no intervalo [1 … 77]. • O preço
da máquina de lavar – um número no intervalo [1,00 … 10.000,00]. • Preço
unitário de um brinquedo – um número inteiro no intervalo [0 … 40].
Dados de saída
Para imprimir uma linha no console:
• Se o dinheiro de Lily for suficiente: o “Sim!
{N}” – onde N é o dinheiro restante após a compra.
• Se o dinheiro não for suficiente:
o “Não! {M}” – onde M é a quantidade que falta.
• Os números N e M devem ser formatados para a segunda casa decimal
apontar.
21 Não! 997,98 Ela economizou BGN 550. Ela vendeu 11 brinquedos a BGN 3 cada = 33
1570,98 3 BGN. O irmão dela pegou 1 BGN por 10 anos = BGN 10.
Restantes 550 + 33 – 10 = BGN 573. 573 <
1570,98 – ela não conseguiu comprar uma máquina de lavar.
1570,98–573 = BGN 997,98 não é suficiente para ela.
Diretrizes e dicas
A solução desta tarefa, como a anterior, também pode ser dividida mentalmente em três partes - ler os dados
de entrada, processá-los e exibir o resultado.
Novamente, começamos escolhendo os tipos de dados e nomes de variáveis apropriados. A idade de Lily
(age) e o preço unitário do brinquedo (presentPrice) são considerados números inteiros. Então vamos usar
o tipo int. Para o preço da máquina de lavar (priceOfWashingMachine) , sabemos que é um número
fracionário e escolhemos o dobro. No código acima, declaramos e inicializamos (atribuímos um valor) às
variáveis.
Para resolver o problema, precisaremos de várias variáveis auxiliares - para o número de brinquedos
(numberOfToys), para o dinheiro economizado (savedMoney) e para o dinheiro, semi-
Machine Translated by Google
Com um loop for , percorremos cada um dos aniversários de Lily. Quando o contador
em nosso loop (que corresponde aos anos de Lily) é um número par, isso significa que
Lily recebeu dinheiro e adicionamos esse dinheiro às suas economias totais de acordo.
Ao mesmo tempo, tiramos 1 BGN cada - o dinheiro que seu irmão leva. Em seguida,
incrementamos o valor da variável moneyForBirthday, ou seja , aumentamos em 10 o
valor que ela receberá em seu próximo aniversário. Por outro lado, quando o contador
(anos de Lily) é um número ímpar, incrementamos o número de brinquedos. Verificamos
a paridade dividindo com resto (%) por 2 – quando o resto é 0, o número é par, e com
resto 1, é ímpar.
Adicionamos o dinheiro dos brinquedos vendidos às economias de Lily:
Neste caso, optamos por usar o operador condicional (?:) (também chamado de
operador ternário) porque o registro é mais curto. Sua sintaxe é a seguinte: operando1 ?
operando2 : operando3. O primeiro operando deve ser do tipo booleano (ou seja,
Dados de entrada
A entrada é lida do console e contém exatamente 2 linhas:
Dados de saída
Para imprimir no console 1 linha. O valor deve ser formatado para dois caracteres
depois da vírgula:
• Se o dinheiro for suficiente: “Sim! Ele viverá uma vida despreocupada e terá {N} dólares
sobrando.” – onde N é o dinheiro que vai sobrar.
• Se o dinheiro NÃO for suficiente: “Ele vai precisar de {M} dólares para sobreviver.” – onde M é
a quantidade que NÃO atinge.
...
1808 ÿ par ÿ -399,85 - 12000 =
-12399,85
12399,85 insuficiente
Diretrizes e dicas
O método para resolver esta tarefa não é diferente dos anteriores, então começamos declarando e
inicializando as variáveis necessárias:
Na condição, diz-se que os anos de Ivancho são 18, por isso, ao declarar a variável anos , atribuímos a ela
um valor inicial de 18. As outras variáveis
lido no console.
Usando um loop for , percorreremos todos os anos. Partimos de 1800 - ano em que Ivancho retorna, e
chegamos ao ano que ele deve viver. No loop, verificamos se o ano atual é par ou ímpar. Verificamos a
paridade dividindo o restante (%) por 2. Se o ano for par, subtraímos 12.000 do patrimônio , e se for ímpar,
subtraímos 12.000 + 50 * (anos de Ivancho) do patrimônio .
Machine Translated by Google
Por fim, resta imprimir os resultados, para os quais verificamos se seu patrimônio era
suficiente para viver sem trabalhar ou não. Se o patrimônio for um número positivo,
imprimimos: “Sim! Ele viverá uma vida despreocupada e terá {N} dólares restantes.", e
se for um número negativo: "Ele precisará de {M} dólares para sobreviver.". Lembre-se de
formatar a soma com duas casas decimais.
Tarefa: Hospital
Por um determinado período de tempo, todos os dias os pacientes chegam ao hospital para
exames. Inicialmente conta com 7 médicos. Cada médico só pode examinar
um paciente por dia, mas às vezes faltam médicos, então os demais pacientes são
encaminhados para outros hospitais. A cada três dias, o hospital faz cálculos e se o número
de pacientes não examinados for maior que o número de examinados, outro médico é
indicado. Como a consulta ocorre antes da admissão dos pacientes, o dia começa.
Dados de entrada
A entrada é lida no console e contém:
• Na primeira linha - o período para o qual você precisa fazer cálculos. Todo
número no intervalo [1 ... 1000].
• Nas próximas linhas (igual ao número de dias) – o número de pacientes que chegam para
exame no dia atual. Um número inteiro no intervalo [0 … 10.000].
Dados de saída
Para imprimir 2 linhas no console:
• Na primeira linha: “Pacientes atendidos: {número de pacientes examinados}.”
• Na segunda linha: “Pacientes não tratados: {número de pacientes não tratados}.”
pacientes.
Diretrizes e dicas
Novamente, começamos declarando e inicializando as variáveis necessárias:
O período para o qual precisamos fazer os cálculos, lemos no console e salvamos na variável period. Também
precisaremos de algumas variáveis auxiliares: o número de pacientes tratados (treatedPatients), o número de
pacientes não tratados (untreatedPatients) e o número de médicos (countOfDoctors), que inicialmente é 7.
Machine Translated by Google
Com a ajuda de um loop for, percorremos todos os dias do período (período) especificado.
Para cada dia, lemos no console o número de pacientes (currentPatients). O aumento de
médicos por condição pode acontecer a cada três dias, MAS somente se o número de
pacientes não examinados for maior que o número de examinados. Para isso, verificamos
se o dia é o terceiro - usando o operador aritmético de divisão pelo resto (%): dia % 3 == 0.
Por exemplo:
• Se o dia for o terceiro, o restante da divisão por 3 será 0 (3 % 3 = 0) e
verificando o dia % 3 == 0 retornará verdadeiro.
• Se o dia for o segundo, o restante da divisão por 3 será 2 (2 % 3 = 2) e
check retornará falso.
• Se o dia for o quarto, o restante da divisão será 1 (4 % 3 = 1) e a verificação retornará
false novamente.
Se a verificação dia % 3 == 0 retornar verdadeiro, ele também verificará se o número de
pacientes não tratados é maior que o número de pacientes tratados: pacientes não
tratados > pacientes tratados. Se o resultado for verdadeiro novamente, o countOfDoctors
será incrementado .
Em seguida, verificamos se o número de pacientes do dia (currentPatients) é maior que o
número de médicos (countOfDoctors). Se o número de pacientes for superior a
grande:
Dados de entrada
A primeira linha da entrada contém o inteiro n (1 ÿ n ÿ 1000) - número de números. Nas
próximas n linhas há um inteiro no intervalo [1 … 1000] - os números a serem verificados por
quantos são divisíveis.
Dados de saída
Imprima no console 3 linhas, cada uma contendo uma porcentagem entre 0% e 100%, com
duas casas decimais, por exemplo, 25,00%, 66,67%, 57,14%.
Diretrizes e dicas
Para esta e a próxima tarefa, você mesmo precisará escrever o código do programa, seguindo as instruções
fornecidas.
O programa que resolve o problema atual é análogo ao da tarefa Histograma que discutimos acima.
Portanto, podemos começar com a declaração das variáveis que precisamos: Os nomes das variáveis de
exemplo podem ser: n - número de números (que precisamos ler no console) e divisibleBy2, divisibleBy3,
divisibleBy4 - variáveis auxiliares mantendo o número de números de o grupo correspondente.
Para ler e atribuir cada número ao seu respectivo grupo, precisaremos executar um loop for de 0 a n ( o
número de números). Cada iteração do loop deve ler e alocar um único número. A diferença aqui é que um
número pode cair em vários grupos ao mesmo tempo, então precisamos fazer três verificações if separadas
para cada número - se é divisível por 2, 3 e 4 (a construção if-else neste caso não funcionam para nós ,
pois após encontrar uma correspondência, a verificação posterior das condições é interrompida) e para
aumentar o valor da variável que mantém o número de números no grupo correspondente.
Finalmente, você precisa imprimir os resultados obtidos seguindo o formato especificado na condição.
Tarefa: logística
Você é responsável pela logística de várias cargas. Dependendo do peso de cada carga, é necessário um
veículo diferente e custa um preço diferente por tonelada:
Machine Translated by Google
Sua tarefa é calcular o custo médio por tonelada de carga transportada, bem como a porcentagem da
carga transportada por cada veículo.
Dados de entrada
Uma série de números são lidos no console, cada um em uma linha separada:
• Primeira linha: número de cargas a serem transportadas – um inteiro no intervalo [1 … 1000]. • Em cada
linha subseqüente, a tonelagem da próxima carga é inserida - um número inteiro no intervalo [1 … 1000].
Dados de saída
Para imprimir no console 4 linhas da seguinte forma:
• Linha #1 – preço médio por tonelada de carga transportada (arredondado para a segunda casa decimal).
• Linha #2 – a porcentagem de carga transportada por van (entre 0,00% e 100,00%, arredondado para a
segunda casa decimal).
• Linha #3 – a porcentagem de carga transportada por caminhão (entre 0,00% e 100,00%). • Linha #4 –
4 143,80 Duas das cargas 1 + 3, num total de 4 toneladas, são transportadas por van.
1 16,00% Uma das cargas é transportada por caminhão: 5 toneladas.
5 20,00% Uma das cargas é transportada por trem: 16 toneladas.
16 64,00%
A soma de todas as cargas é: 1 + 5 + 16 + 3 = 25 toneladas.
3
Porcentagem de carga de van: 4/25*100 = 16,00%
Porcentagem de carga de caminhão: 5/25*100 =
20,00% Porcentagem de carga de trem: 16/25*100 =
64,00% Preço médio por tonelada de carga
*
transportada: (4 *175
200++16
5 * 120) / 25 = 143,80
149,38 120,35
52 7,50% 4 53 0,00%
Machine Translated by Google
10 42,50% 0,63%
20 50,00% 7 56 99,37%
1 999
7
Diretrizes e dicas
Primeiro vamos ler o peso de cada carga e somar quantas toneladas são transportadas por van,
caminhão e trem respectivamente e calcular o total de toneladas de carga transportada. Calcularemos
os preços para cada tipo de transporte de acordo com as toneladas transportadas e o preço total. Por
fim, calcularemos e imprimiremos o custo médio total por tonelada e qual a porcentagem da carga
transportada por cada meio de transporte.
para percorrer todas as cargas. Para cada carga, lemos seu peso (em toneladas) no console e
armazenamos em uma variável, por exemplo, toneladas. Adicionamos o peso da carga atual (toneladas)
à soma da tonelagem de todas as cargas (sumOfTons ). Depois de ler o peso da carga atual,
precisamos determinar qual veículo será usado para isso (microônibus, caminhão ou trem). Para isso,
precisaremos de verificações if-else :
• Se o valor da variável toneladas for menor que 3, aumentamos o valor da variável microbusTons
pelo valor de toneladas: microbusTons += toneladas;
• Caso contrário, se o valor de toneladas for superior a 11, incrementamos truckTons por toneladas.
Antes de imprimir a saída, precisamos calcular a porcentagem de toneladas transportadas por cada
veículo e o preço médio por tonelada. Para o preço médio da tonelada, declararemos outra variável
auxiliar totalPrice, na qual somaremos o preço total de todas as mercadorias transportadas (de van,
caminhão e trem). Obteremos o preço médio dividindo totalPrice por sumOfTons. Resta você calcular
o percentual de toneladas transportadas por cada veículo e imprimir os resultados, seguindo o formato
na condição.
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=96SoFtFTPBc.
Conecte-se Saída
**********
**********
**********
**********
**********
(não há) **********
**********
**********
**********
**********
Diretrizes e dicas
Para realizar a tarefa, vamos recorrer a um pequeno truque, vamos usar um método. No
Capítulo 10, entraremos em detalhes sobre o que são métodos e como eles são usados.
O método nos permitirá executar o mesmo código mais de uma vez e em mais de um
lugar em um determinado programa. Nesta fase não revelaremos mais do que o conceito
dos métodos.
Machine Translated by Google
Diretrizes e dicas
Para resolver esta tarefa, usaremos a classe Scanner, que nos permitirá capturar o
tamanho da forma que está sendo passada.
Machine Translated by Google
Loops aninhados
Loops aninhados são uma construção onde outro loop (interno) é executado dentro
do corpo de um loop (externo). Para cada rotação do loop externo, o loop interno é
totalmente girado. Isso acontece da seguinte forma:
• Ao iniciar a execução de loops aninhados, o loop externo é iniciado primeiro: sua
variável de controle é inicializada e, após a verificação do fim do loop, o código em
seu corpo é executado.
• O loop interno é então executado. Sua variável de controle é inicializada com seu
valor inicial, uma verificação de fim de loop é feita e o código em seu corpo é
executado.
• Ao atingir o valor definido para o fim do ciclo interno, prog
a esteira é retornada um passo acima e a execução iniciada no ciclo anterior
(externo) é continuada. A variável de controle para o loop externo é alterada em
uma etapa, a condição de término é verificada e uma nova execução do loop
aninhado (interno) é iniciada.
• Isso é repetido até que a variável do loop externo atinja a condição de fim do loop.
Vejamos o exemplo acima. Após a inicialização do loop externo (externo), seu corpo, que contém
o segundo loop (aninhado ou ainda interno), começa a ser executado. Ele gera numberOfstars
por número de estrelas em uma linha. Após o término da execução do loop interno, o controle do
programa é retornado para a primeira iteração do externo, e o externo continuará. Uma linha
(System.out.println()) foi adicionada ao corpo do loop externo , que se encarregará de passar
para a próxima linha no final da execução do loop interno. Sem esse código, todos os asteriscos
serão exibidos em uma linha. Se usarmos println () em vez de print() no loop interno, todos os
asteriscos serão exibidos em uma linha separada. Você pode tentar e ver por si mesmo. Isso é
seguido pelo incremento da variável esquerda (incrementando, em nosso caso, por 1) do loop
externo, e todo o loop interno será executado novamente. O loop interno será executado tantas
vezes quanto o corpo do loop externo for executado, neste caso, numberOfstars vezes.
Diretrizes e dicas
A tarefa é semelhante à anterior. No entanto, aqui é necessário considerar como deixar um
espaço após os asteriscos para que não haja espaços extras no início ou no final.
Machine Translated by Google
$$
3 $$ 4
$$$
$$$$
$$$$$
Diretrizes e dicas
A tarefa é semelhante à de desenhar um retângulo e um quadrado. Novamente, usaremos
loops aninhados, mas há um problema aqui. A diferença é que o número de colunas que
precisamos imprimir depende da linha em que estamos, não do número de entrada n. A
partir dos dados de entrada e saída da amostra, notamos que o número de dólares
depende de qual linha estamos no momento da impressão, ou seja, 1 cifrão significa
primeira linha, 2 cifrões significa segunda linha, etc. Vejamos o exemplo abaixo com mais
detalhes. Vemos que a variável do loop aninhado está vinculada à variável do externo.
Assim, nosso programa imprime o triângulo desejado.
+–-–-+
+–-–+
+–-+ |–-–-||–-
|–-–||–
4 |–-||– 5 6 –-||–-–-||
-–||–-–|
-| –-–-|
+–-+
+–-–+
+–-–-+
Diretrizes e dicas
Podemos resolver o problema da seguinte forma:
• Lemos o número n do console .
• Imprimimos a parte superior: primeiro + sinal, depois n-2 vezes - e finalmente + sinal. •
Imprimimos a parte do meio: imprimimos n-2 linhas imprimindo primeiro um sinal |, depois
n-2 vezes - e finalmente um sinal | novamente. Podemos conseguir isso com
loops aninhados.
solução: https://judge.softuni.bg/Contests/Practice/Index/657#4.
* ** ***
1 * 2 **
3 ***
4 ****
* ** ***
* **
Diretrizes e dicas
Para resolver a tarefa dada, é necessário dividir mentalmente o losango em duas partes: superior
(incluindo a linha do meio) e inferior. Para exibir cada parte no console, usaremos dois loops, e o próprio
leitor deve encontrá-lo
a dependência entre n e as variáveis nos loops.
|*|*
1 2 3 |*|* 4
|*|* ** | ** ***
|*|* ** | ** ***
** | ** | *** **** |
| ***
****
Diretrizes e dicas
A partir dos exemplos, vemos que a árvore pode ser dividida em três partes lógicas. A
primeira parte são os asteriscos (*) e os espaços antes e depois deles, a parte do meio
é o | e a última parte são os asteriscos (*) novamente, desta vez apenas os espaços
antes deles. A impressão pode ser realizada em apenas um ciclo e voltaremos a recorrer
ao método que usamos no início.
Machine Translated by Google
Conecte-se Saída
********** **********
*////////* *////////* *///////*|||||*////////*
5 *//// ////* *////////*
********** **********
Machine Translated by Google
Diretrizes e dicas
A partir dos exemplos, vemos que os óculos podem ser divididos em três partes - superior, médio e
inferior. Abaixo está um pedaço de código que pode resolver o problema.
Ao imprimir a parte do meio, precisamos verificar se a linha é (n-1) / 2 - 1, pois fica claro pelos exemplos
que nesta linha devemos imprimir traços verticais em vez de espaços.
Escreva um programa que receba um número n (2 ÿ n ÿ 100) e imprima uma casa de tamanho nxn,
como nos exemplos:
Machine Translated by Google
Diretrizes e dicas
Entendemos pela condição do problema que a casa tem dimensões n x n. O que
vemos no exemplo de entrada e saída é que:
Um telhado
• Em sua parte inferior, há muitas estrelas e poucos ou nenhum traço. • Com cada linha
abaixo, as estrelas aumentam em 2 e os traços
diminuir em 2.
Fundação
• As linhas representam 2 linhas verticais - uma no início e outra no final da linha, bem
como estrelas entre as linhas verticais com comprimento de corda n - 2.
Lemos n do console e escrevemos o valor em uma variável do tipo int.
Machine Translated by Google
É muito importante verificar se os dados de entrada são válidos! Nessas tarefas, não há
problema em converter diretamente o que é lido do console para um tipo int, pois é dito
explicitamente que receberemos inteiros válidos. No entanto, se estivermos fazendo
aplicações mais sérias, é uma boa prática verificar os dados de entrada. E se em vez
de um número o usuário digitar a letra "A"?
Para desenhar o telhado, registramos qual será o número inicial de estrelas na variável estrelas:
É importante notar que quando n é um número ímpar, o comprimento do telhado é uma ordem maior que
o da base. Na linguagem Java, quando dois números inteiros são divididos e há resto, o resultado será
um número sem resto.
Exemplo:
Neste exemplo, a divisão não é por 2 números inteiros. "f" após um número indica que o número fornecido
é do tipo float . O resultado de 3 / 2f é 1,5f. Math.ceil(…) arredonda a divisão para cima. Em nosso caso,
1,5f se tornará 2. (int) é usado para que possamos converter o tipo de volta para int.
Depois de calcular o comprimento do telhado, fazemos um loop de 0 para roofLength. A cada iteração
iremos:
• Calculamos o número de traços que precisamos desenhar. O número será igual a (n - estrelas) / 2.
Escrevemos no preenchimento variável.
Machine Translated by Google
Exemplo: diamante
Escreva um programa que receba um inteiro n (1 ÿ n ÿ 100) e o imprima
diamante de tamanho n, como nos exemplos a seguir:
Diretrizes e dicas
O que sabemos da condição do problema é que o diamante tem tamanho n x n.
A partir da amostra de entrada e saída, podemos concluir que todas as linhas contêm exatamente n caracteres
cada e todas as linhas, exceto os vértices superiores, possuem 2 estrelas (*). Podemos dividir mentalmente o
diamante em 2 partes:
Topo • Se n
se afastam mais. • O espaço antes, entre e depois dos asteriscos (*) é preenchido
Parte inferior •
Com cada linha para baixo, as estrelas convergem umas para as outras. Isso significa que o espaço (traços)
entre eles diminui e o espaço (traços)
esquerda e direita aumenta.
• Em cada linha, as estrelas são cercadas por traços externos, exceto por
a linha do meio.
• Há um espaço entre as duas estrelas em cada linha, exceto a primeira
e a última linha (às vezes a estrela é 1).
Começamos a desenhar a parte superior do diamante. A primeira coisa que precisamos fazer é calcular o valor
inicial da contagem de traços externos leftRight (os traços do lado de fora das estrelas). É igual a (n - 1) / 2,
arredondado para baixo.
Depois de calcularmos leftRight, começamos a desenhar o topo do diamante. Podemos começar fazendo um
loop de 0 a n / 2 + 1 (arredondado para baixo). A cada iteração do loop, as seguintes etapas devem ser
executadas:
Machine Translated by Google
• Se mid for menor que 0, então sabemos que deve haver 1 estrela na linha. Se for maior ou igual
a 0, devemos desenhar traços de comprimento no meio e uma estrela depois deles.
Repetir o mesmo trecho de código é considerado uma prática ruim, pois dificulta
a manutenção do código. Vamos imaginar que temos código (por exemplo, a
lógica para desenhar uma linha a partir do losango) em mais alguns locais do
programa e precisamos fazer alguma alteração. Para fazer isso, precisaríamos
corrigir o código em cada lugar onde colocamos esse código. E agora vamos
pensar no seguinte estudo de caso: O que aconteceria se o mesmo
Machine Translated by Google
Também aprendemos como usar métodos para evitar a repetição do mesmo trecho de
código diversas vezes.
Machine Translated by Google
}
System.out.println();
}
Também declaramos nosso próprio método repeatStr(…), que nos ajuda a imprimir um
determinado caractere (ou série de caracteres) um determinado número de vezes:
Tarefas de exame
Agora vamos resolver alguns problemas do exame juntos para consolidar o que aprendemos e
desenvolver ainda mais nosso pensamento algorítmico.
Dados de entrada
A entrada é um inteiro n no intervalo [3 … 1000].
Machine Translated by Google
Dados de saída
Para imprimir no console n linhas de texto representando a fortaleza, assim como nos exemplos.
/^^\__/^^\ | | | |
/^^\/^^\ | | |
/^\/^\ | | | __ | \__/ \__/
| \__/\__/
3 \_/\_/ 4 5
Diretrizes e dicas
Pela condição da tarefa, vemos que os dados de entrada consistirão em apenas uma linha, que
conterá um inteiro no intervalo [3 … 1000]. Por esse motivo, usaremos uma variável do tipo int.
• telhado
• corpo
• base
Pelos exemplos podemos entender que a cobertura é composta por duas torres e uma parte
^
intermediária. Cada torre consiste em início /, meio e finalize \.
O meio é de tamanho n/ 2, então podemos separar esse valor em uma variável separada. Ele manterá
o tamanho do meio da torre.
Declaramos também uma segunda variável na qual armazenaremos o valor da parte entre as duas
torres. A parte do meio do telhado é de tamanho 2 * n - 2 * colSize - 4.
Machine Translated by Google
Para imprimir a capa no console, usaremos nosso método repeat Str(…), que recebe dois parâmetros
(string, int) e concatena um determinado caractere (ou série de caracteres) n vezes.
O corpo da fortaleza é constituído por um início |, um meio (espaço vazio) e um fim |. Os dados médios
de um local vazio são de tamanho 2 * n - 2. O número de linhas para paredes, podemos determinar a partir
de nossos exemplos fornecidos - n - 3.
Para desenhar a penúltima linha que faz parte da base, precisamos imprimir start |, middle (blank)_(blank)
e end |. Para fazer isso, podemos reutilizar as variáveis colSize e midSize que já declaramos, pois
vemos pelos exemplos que elas são iguais ao número
_ V
capas.
A estrutura da base da fortaleza é a mesma do telhado. É composto por duas torres e uma parte
intermediária. Cada torre tem um começo \, um meio _ e terminando /.
Tarefa: borboleta
Escreva um programa que leia um inteiro n do console e desenhe um 2 * (n - 2) + 1 largura
*
n - nos
de linha pepe ore como 1 colunas e altura
exemplos 2 Suas partes esquerda e direita têm n - 1 de
abaixo.
largura.
Dados de entrada
A entrada é um inteiro n no intervalo [3 … 1000].
Dados de saída
Para imprimir no console 2 borboletas, * (n - 2) + 1 linhas de texto representando
como nos exemplos.
Diretrizes e dicas
Pela condição da tarefa, vemos que os dados de entrada serão lidos de apenas uma linha,
que conterá um inteiro no intervalo [3 … 1000]. Por esse motivo, usaremos uma variável do
tipo int.
Podemos dividir a figura em 3 partes - asa superior, corpo e asa inferior. Para desenhar a asa
superior da borboleta, precisamos dividi-la em partes - início *, meio \ / e fim *. Depois de olhar
os exemplos, podemos dizer que a origem é de tamanho n - 2.
Machine Translated by Google
Também vemos que a asa superior da borboleta tem tamanho n - 2, então podemos
fazer um loop que repete meioRowSize vezes.
A partir dos exemplos podemos notar que em uma linha par temos start -, middle \ / e
end *, e em ímpar temos start *, middle \ / e end -. Portanto, precisamos fazer um if-
else para verificar se a linha é par ou ímpar, e sim de acordo
nós imprimimos um dos dois tipos de linhas.
Dados de entrada
A entrada é um inteiro N no intervalo [3 … 1000].
Dados de saída
Para imprimir nas linhas de texto do console representando o sinal de aviso STOP, assim
como nos exemplos.
......................
......//___________\\...... .....//
_____________\\..... ....//
...._______.... _______________\\.... ...//
...//_____\\... ..// _________________\\... ..//
_______\\.. .// ___________________\\.. .//
3 _________\\. 6 _____________________\\.
//___PARAR!___\\ \ //_________PARAR!_________\\ \
\___________// .\ \_______________________// .\
\_________//. ..\ \_____________________//. ..\
\_______//.. \___________________//.. ...\
\_________________//... ....\
\_______________//.... .....\\
\___________//.....
Diretrizes e dicas
Pela condição da tarefa, vemos que os dados de entrada serão lidos de apenas uma
linha, que conterá um inteiro no intervalo [3 … 1000]. Por esse motivo, usaremos uma
variável do tipo int.
Também precisamos criar uma segunda variável na qual armazenaremos o valor do meio da linha inicial
e é de tamanho 2 * n + 1.
Agora que declaramos e inicializamos as duas variáveis, podemos imprimir a linha inicial no console.
Não vamos esquecer de passar uma nova linha de console com System.out.println(…).
Para plotar as linhas onde o caractere "expande", precisamos criar um loop que repita n vezes. A
estrutura de uma linha consiste em // + meio + \\ e fim .. Para poder reutilizar as variáveis criadas,
Começar ., precisamos diminuir
_ os pontos em 1 e os sublinhados em 2, porque já imprimimos a
primeira linha, e as linhas de pontos e sublinhados na próxima linha da figura diminuem.
A parte do meio da figura tem um começo // + _, meio ambiente PARE! e fim _ + \\. O número de
as linhas de fundo _ å (sublinhado - 5) / 2.
Machine Translated by Google
A parte inferior da figura, onde o sinal diminui, podemos criar novamente um loop para
loop n número de vezes. A estrutura de um + \\, ambiente .. O número de pontos na
subseqüente . primeira linha_ de e fim // + é o início do ciclo deve ser 0 e em cada
iteração
aumentar em um. Portanto, podemos dizer que a magnitude dos pontos na parte inferior
da figura é igual a i.
Tarefa: Flecha
Escreva um programa que leia um inteiro ímpar n do console e desenhe uma seta vertical
com dimensões como nos exemplos abaixo.
Dados de entrada
Machine Translated by Google
Diretrizes e dicas
Pela condição da tarefa, vemos que os dados de entrada serão lidos de apenas uma
linha, que conterá um inteiro no intervalo [3 … 1000]. Por esse motivo, usaremos uma
variável do tipo int.
Podemos dividir a figura em 3 partes - superior, média e inferior. A parte superior consiste
em duas subpartes - a linha de abertura e o corpo da flecha. A partir dos exemplos,
você pode ver que o número de pontos externos na linha inicial e no corpo da seta é (n -
1) / 2. Podemos escrever esse valor em uma variável outerDots.
O número de pontos internos no corpo da seta é (n - 2). Precisamos criar uma variável
chamada innerDots que manterá esse valor.
A partir dos exemplos podemos ver a estrutura da linha de abertura. Precisamos usar
nossas variáveis declaradas e inicializadas, outerDots e n, para imprimir a linha inicial.
Não devemos esquecer que devemos ir para uma nova linha com System.out.println();.
Machine Translated by Google
Para desenhar o corpo da seta no console, precisamos criar um loop que se repita n - 2
vezes.
O meio da figura é composto por start #, middle . e terminar #. A partir dos exemplos,
vemos que a contagem # é igual a outerDots aumentado em 1 e para isso podemos
usamos a mesma variável novamente.
Para desenhar a parte inferior da seta, precisamos definir novos valores para as duas
variáveis outerDots e innerDots.
O loop que vamos fazer deve ser repetido n - 2 vezes e imprimiremos separadamente a
última linha da figura. Em cada iteração, outerDots é incrementado em 1 e innerDots é
decrementado em 2.
Machine Translated by Google
A última linha da nossa figura é composta por start ., middle # e end .. O número
sobre
. é igual a outerDots.
Tarefa: machado
Escrever um programa que lê um inteiro n e desenha um eixo com as dimensões
mostradas abaixo. A largura do machado é de 5 * N colunas.
Dados de entrada
A entrada é um inteiro n no intervalo [2..42].
Dados de saída
Para imprimir o machado do console, como nos exemplos.
Exemplo de entrada e saída
Conecte-se Saída
-------------------------**--------------
------------------------*-*-------------
--------------*--*------------
------------------------*---*-----------
------------------------*----*----------
------------------------*-----*---------
--------------*------*--------
--------------*-------*-------
8 *************************-------*-------
*************************-------*-------
*************************-------*-------
*************************-------*-------
--------------*-------*-------
-------------*---------*------
----------------------*-----------*-----
---------------------*****************----
Machine Translated by Google
Diretrizes e dicas
Para resolver o problema, devemos primeiro calcular o tamanho dos traços à esquerda,
os traços centrais, os traços à direita e todo o comprimento da figura.
A parte inferior da figura deve ser dividida em duas partes - a cabeça do machado e a
última linha da figura. Vamos imprimir a cabeça do machado no console fazendo um loop
que se repete n/2 - 1 vezes. Em cada iteração, os traços à esquerda e à direita diminuem
em 1, e os traços do meio aumentam em 2.
Para a última linha da figura, podemos novamente usar as três variáveis já declaradas e
inicializadas leftDashes, middleDashes, rightDashes.
• ciclos de passos
• loops while • loops
do-while • loops infinitos
Neste tópico, também entenderemos o que é o operador break e como utilizá-lo para quebrar um loop. Além
disso, usando a construção try-catch , aprenderemos a observar erros durante a execução de
nosso programa.
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=kaJSrGrvakQ.
Ciclos de passos
No capítulo "Repetições (loops)" aprendemos como funciona o loop for e agora sabemos quando e com que
propósito usá-lo. Neste tópico daremos atenção a uma determinada e muito importante parte da sua construção,
nomeadamente o degrau.
O que é um passo?
A etapa é a parte da construção do loop for que especifica quanto aumentar ou diminuir o valor de sua variável
principal. Ele é declarado por último no esqueleto do loop for . Geralmente é de tamanho 1 e, nesse caso, em
vez de escrever i += 1 ou i -= 1, podemos usar
os operadores i++ ou i--. Se quisermos que nosso passo seja diferente de 1, usamos o operador i += (o
tamanho do passo) para aumentar e i -= (o tamanho do passo) para diminuir. No passo 10, o loop ficaria
assim:
A seguir, uma série de problemas de exemplo, cuja solução nos ajudará a entender melhor o uso da etapa do
loop for .
Machine Translated by Google
Exemplo: os números de 1 a N a 3
Escreva um programa que imprima os números de 1 a n com um passo de 3. Por exemplo, se n
= 100, a saída será: 1, 4, 7, 10, …, 94, 97, 100.
Podemos resolver a tarefa através da seguinte sequência de ações (algoritmo):
loop while
O próximo tipo de loop que veremos são chamados while loops. A particularidade deles é
que eles repetem um bloco de comandos até que uma determinada condição seja verdadeira.
Como estrutura, eles diferem dos loops for , eles têm até um simplificado
sintaxe.
A seguir, uma série de problemas de exemplo, cuja solução nos ajudará a entender melhor o
uso do loop while .
a b gcd a b gcd
24 16 8 15 9 3
67 18 1 10 10 10
12 24 12 100 88 4
Machine Translated by Google
Definição de NOD: o máximo divisor comum de dois números naturais a e b é o maior número que
divide a e b simultaneamente sem deixar resto.
algoritmo de euclides
Na próxima tarefa, usaremos um dos primeiros algoritmos publicados para encontrar o NOD - o
algoritmo de Euclides:
enquanto b ÿ 0
int velhoB = b; b =
a % b; a =
antigoB;
imprima um;
Loop faça-enquanto
O próximo loop que conheceremos é do-while . Na estrutura, assemelha-se ao tempo, mas
há uma diferença significativa entre eles. Consiste no fato de que o do-while executará seu
corpo pelo menos uma vez. Por que isso está acontecendo? Na construção do loop do-while ,
a condição é sempre verificada após
seu corpo, que por sua vez garante que na primeira iteração do loop, o código será executado
e a verificação de fim de loop será aplicada em cada iteração subsequente do do-while .
A seguir está a série usual de exemplos de problemas, cujas soluções nos ajudarão a entender
melhor o loop do-while .
• No corpo do loop:
o Atribuímos um novo valor ao fato que é o resultado da multiplicação
do valor atual de fato com o valor atual de n.
o Reduzimos o valor de n em -1.
problema:
• Para a condição do loop, usaremos n > 0 porque, após cada cálculo do resultado no corpo do loop,
removeremos o último dígito de n.
• No corpo do loop:
o Atribuímos um novo valor a sum, que é o resultado da adição do
o valor atual de soma com o último dígito de n.
solução: https://judge.softuni.bg/Contests/Practice/Index/659#8.
declaração de quebra
Já sabemos que um loop infinito executa determinado código ad infinitum, mas
o que acontece se desejarmos, em um determinado momento, sob uma determinada condição, sair à força do
loop? A pausa do operador vem em socorro , na tradução - pare,
interromper.
Definição: Um número inteiro é primo se for divisível sem deixar resto apenas por si mesmo e
por 1. Por definição, os números primos são positivos e maiores que 1. O menor número primo
é 2.
Podemos assumir que um inteiro n é primo se n > 1 e n não é divisível por um número entre 2
e n-1. Os
primeiros números primos são: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, …
Em contraste, números não primos (compostos) são números cuja composição
zição é composta por um produto de números primos.
Algoritmo para verificar se um inteiro é primo: verificamos se n>1 n-1 sem resto. e n é divisível
por 2, 3, …,
• Criamos um loop for , para o qual definimos 2 como valor inicial para a variável do loop,
como condição seu valor atual <= ÿn. O passo do loop é 1.
• No corpo do loop, verificamos se n dividido pelo valor atual tem resto. Se não houver
resto da divisão, alteramos isPrime para false e forçamos a saída do loop usando a
instrução break. • Dependendo do valor de isPrime , imprimimos
se o número é primo
(verdadeiro) ou respectivamente composto (falso).
Machine Translated by Google
Observação: embora o código acima esteja correto, ele não funcionará se ao invés de
números o usuário inserir texto, por exemplo “Número inválido”. Em seguida, a análise
do texto para um número será interrompida e o programa exibirá uma mensagem de erro
(exceção). Aprenderemos como lidar com esse problema e como capturar e tratar
exceções usando a construção try-catch em um momento.
Aqui está uma solução errada que parece certa à primeira vista:
Por que isso acontece? Como podemos ver, o resultado está faltando "1 1". Quando o programa atinge o ponto em
que i = 1 ej = 1, ele entra na verificação if e executa a operação de interrupção. Dessa forma, o loop interno é
encerrado, mas a execução do loop externo continua. i aumenta, o programa entra no interno
Quando usamos a instrução break em um loop aninhado , ela interrompe apenas a execução
do loop interno.
Qual é a solução correta? Uma maneira de resolver esse problema é declarando uma variável booleana que
monitora se preciso continuar executando o loop. Se for necessária uma saída (saída de todos os loops aninhados),
a variável é definida como true e o loop interno é encerrado com break e, após verificação subsequente, o loop
externo também é encerrado. Aqui está um exemplo de implementação dessa ideia:
Assim, quando i + j = 2, o programa tornará a variável hasToEnd = true e sairá do loop interno. Na próxima iteração
do loop externo, através do teste if , o programa não conseguirá alcançar o loop interno
O que é try-catch?
A construção do programa try-catch serve para capturar e tratar exceções (erros) durante a execução
do programa.
Quando ocorre uma exceção, diz-se que a exceção foi "lançada" (lançar exceção). É daí que vem a
expressão "capturar exceção".
Na próxima tarefa, veremos como lidar com uma situação em que o usuário insere uma entrada não
numérica (por exemplo, string em vez de int) usando try-catch.
o Se o número for par, nós o imprimimos e saímos do loop (com break). Programa
o tapete fez seu trabalho e acabou.
o Para um número ímpar, imprimimos uma mensagem de que um número par é necessário
sem sair do loop (porque queremos que ele se repita novamente).
F0 = 1
F1 = 1
Fn = Fn-1 + Fn-2
Diretrizes e dicas
Ideia para resolver a tarefa:
• Criamos uma variável n à qual atribuímos um valor inteiro de
entrada do console.
• Criamos as variáveis f0 e f1 às quais atribuímos o valor 1, pois é assim que a linha
começa.
• Criamos um loop for com a condição de que o valor atual i < n - 1.
• No corpo do loop:
o Criamos uma variável temporária fNext à qual atribuímos next
o número da sequência de Fibonacci.
o Para f0 atribuímos o valor atual de f1.
o Atribuímos o valor da variável temporária fNext a f1 .
• Fora do loop, imprimimos o enésimo número de Fibonacci.
Exemplo de implementação:
Machine Translated by Google
1 1
23 23
7 5 12 10
456 456
345
7 7 8 9 10
Diretrizes e dicas
Podemos resolver o problema com dois loops aninhados (por linhas e colunas)
imprimindo neles e saindo quando o último número for alcançado. Aqui está a ideia,
explicada com mais detalhes:
• Criamos uma variável n à qual atribuímos um valor inteiro de
entrada do console.
• Criamos uma variável num com valor inicial 1. Ela armazenará o número de números
impressos. A cada iteração iremos incrementá-lo em 1 e imprimi-lo. • Criamos um loop
for externo que será responsável pelas linhas da tabela. Chamamos a variável de loop de
linha e atribuímos a ela um valor inicial de 0. Como condição, colocamos linha < n. O
tamanho do passo é 1.
• No corpo do loop, criamos um loop for interno que será responsável pelas colunas da
tabela. Chamamos a variável de loop de col e atribuímos a ela um valor inicial de 0.
Como condição, colocamos col < linha (linha = número de dígitos por linha). O tamanho
do passo é 1.
• No corpo do loop aninhado:
Machine Translated by Google
num > n. Se for maior, interrompemos a execução do nosso programa usando break.
solução: https://judge.softuni.bg/Contests/Practice/Index/659#14.
1234
12
2343
3 323 4
3432
2321
4321
Diretrizes e dicas
Podemos resolver o problema com dois loops aninhados e alguns cálculos neles:
• Lemos no console o tamanho da tabela em uma variável inteira n. • Criamos um
loop for que será responsável pelas linhas da tabela. Chamamos a variável de loop de
linha e atribuímos a ela um valor inicial de 0. Como condição, colocamos linha < n.
O tamanho do passo é 1.
• No corpo do loop, criamos um loop for aninhado que será responsável pelas colunas
da tabela. Chamamos a variável de loop de col e atribuímos a ela um valor inicial de
0. Como condição, colocamos col < n. O tamanho do passo é 1.
• No corpo do loop aninhado: o
Criamos uma variável num à qual atribuímos o resultado da linha atual + a coluna
atual + 1 (+1 porque começamos a contar a partir de 0). o Verificamos num >
n. Se num for maior que n, atribuímos um novo valor a num igual a 2 n - o valor
atual de num. Fazemos isso para não *exceder n em nenhuma das células da
tabela.
ÿ Imprimimos o número da célula atual da tabela.
• Imprimimos uma linha em branco no loop externo para passar para o próximo
ordem.
Machine Translated by Google
Os loops while / do-while se repetem até que uma determinada condição seja verdadeira:
int num = 1;
while (num <= n)
{ System.out.println(num++);
}
int n = 0;
while (true) { n =
Integer.parseInt(scanner.nextLine()); if (n % 2 == 0)
{ quebrar; // número
par -> sai do loop
}
System.out.println("O número não é par.");
}
System.out.println(" Número par digitado: {0}", n);
Agora sabemos como capturar erros (exceções) durante a execução do nosso programa:
tente
{ System.out.println("Digite o número par: "); int n =
Integer.parseInt(scanner.nextLine());
} catch (Exceção ex)
{ System.out.println(" Número inválido.");
nomeadamente:
• ciclos de passos
• loops aninhados
• loops while
• loops faça-enquanto
• a construção try-catch
Tarefas de exame
Vamos consolidar nossos conhecimentos resolvendo alguns problemas mais complexos com ciclos dados em
vestibulares.
• Character 1: dígito de 1 a n.
• Character 2: dígito de 1 a n.
Dados de entrada
A entrada é lida do console e consiste em dois inteiros: n e l no intervalo [1 … 9], um por linha.
Dados de saída
Todas as senhas "burras" devem ser impressas no console em ordem alfabética,
separados por um espaço.
Diretrizes e dicas
Podemos dividir mentalmente a solução da tarefa em três partes:
• Lendo os dados de entrada – na presente tarefa, isso envolve a leitura de dois números n e l, cada um em
uma linha separada.
Vamos declarar e inicializar as variáveis que irão armazenar os caracteres da senha: para os caracteres digitais
- do tipo int - d1, d2, d3, e para as letras - do tipo char - l1, l2.
Gerando um resultado
Machine Translated by Google
Precisamos aninhar cinco loops for um dentro do outro, um para cada variável. Para
garantir a condição de que o último dígito d3 seja maior que os dois primeiros, usaremos
a função interna Math.max(…).
• 112111 ÿ 1 * * * * *
1 2 1 1 1=2
• 121111 ÿ 1 * * * * *
2 1 1 1 1=2
• 211111 ÿ 2 * * * * *
1 1 1 1 1=2
Dados de entrada
A entrada é lida do console e consiste em um número inteiro no intervalo [1 … 600.000].
Dados de saída
Todos os números mágicos divididos por devem ser impressos no console
intervalo.
Diretrizes e dicas
A solução do problema do número mágico segue o mesmo conceito (novamente precisamos
gerar todas as combinações para n elementos). Seguindo estas etapas, tente resolver a tarefa
sozinho.
• Declarar e inicializar uma variável de tipo inteiro int e pro
leia a entrada do console.
• Aninhe seis loops for um dentro do outro, um para cada dígito dos números de 6 dígitos que
estão sendo procurados.
• No último loop, por meio de uma construção if , verifique se o produto de
os seis dígitos é igual ao número mágico.
Machine Translated by Google
No capítulo anterior, examinamos outras construções cíclicas. Vejamos um exemplo de solução para o mesmo
problema, no qual usamos o loop while. Primeiro, precisamos armazenar o número mágico de entrada em uma
variável adequada. Em seguida, inicializaremos 6 variáveis - uma para cada um dos seis dígitos
• No início de cada loop, definimos um valor para o próximo dígito, neste caso: d2 = 0. Nos loops for
aninhados , inicializamos as variáveis nos loops internos a cada incremento dos externos. queremos
alcançar
mesmo comportamento aqui.
• Ao final de cada loop, incrementaremos o número em um: d++. • No loop mais interno
faremos a checagem e se necessário iremos
nós imprimimos no console.
Machine Translated by Google
Vamos remover a verificação if do loop mais interno. Agora, vamos inicializar cada
variável fora dos loops e deletar as linhas dx = 0. Depois de executar o programa,
obtemos apenas 10 resultados. Por que? E se você usar um loop do-while ? Nesse
caso, esse ciclo não parece adequado, não é? Pense no porquê. Claro, você também
pode resolver o problema usando um loop infinito.
Machine Translated by Google
Como podemos ver, podemos resolver um problema com diferentes tipos de loops. Claro, há uma melhor
escolha para cada tarefa. Para praticar cada ciclo - tente resolver cada um dos seguintes problemas com
todos os ciclos estudados.
Conecte-se
Saída
Todos os números qualificados são impressos em uma única linha separada por espaços no console.
Diretrizes e dicas
Machine Translated by Google
A primeira parte é trivial - leremos três números inteiros do console, portanto, usaremos
o tipo int.
Também encontramos a segunda parte - inicializando o loop for . Há um pequeno
problema aqui - a condição menciona que os números devem ser impressos na ordem
inversa. Isso significa que o valor inicial da variável i será o maior número, o que vemos
nos exemplos é M. Assim, o valor final de i deve ser N. O fato de imprimirmos os
resultados na ordem inversa e os valores de eu sugiro que o passo seja decrementado
em 1.
O outro problema nesta tarefa é que, além da verificação acima, precisamos fazer mais
uma - se o número é igual ao número de "parada" fornecido pelo console na terceira
linha. Para chegar a esta verificação, o número que estamos verificando deve passar pelo
superior. Por esta razão, construiremos outro if construct, que iremos aninhar dentro do
anterior. Se a condição for verdadeira, a tarefa é impedir a impressão do programa, o que
neste caso específico podemos fazer com uma instrução break, que nos tirará do loop
for .
Assim, se a condição de verificar se o número corresponde ao número "parado" retornar
falso, por padrão, nosso programa deve continuar imprimindo. Na verdade, isso cobre a
quarta e última parte do nosso programa.
Dados de entrada
A entrada é lida do console e consiste em um número inteiro no intervalo [1 … 600.000].
Dados de saída
Imprima todos os números especiais separados por um espaço no console.
4448 4481 4482 4484 4488 4811 4812 4814 4818 4821
4822 4824 4828 4841 4842 4844 4848 4881 4882 4884
4888 8111 8112 8114 8 118 8121 8122 8124 8128
8141 8142 8144 8148 8181 8182 8184 8188 8211 8212
8214 8218 8221 8222 8224 8228 8241 8242 8244 8248
8281 8282 8284 8288 8411 8412 8414 8418 8421 8422
8424 8428 8441 8442 8444 8448 8481 8482 8484 8488
8811 8812 8814 8818 8821 8 822 8824 8828 8841
8842 8844 8848 8881 8882 8884 8888
Diretrizes e dicas
Resolva o problema de forma independente usando o que você aprendeu nos dois
anteriores. Lembre-se da diferença entre os operadores de divisão de número inteiro (/) e
divisão de resto (%) em Java.
Tarefa: números
Para escrever um programa que lê do console 1 inteiro no intervalo [100 … 999] e o
imprime um certo número de vezes - modificando-o
antes de cada impressão da seguinte forma:
• Se um número for divisível por 5 sem resto, subtraia seu primeiro dígito.
• Se um número for divisível por 3 sem resto, subtraia seu segundo dígito. • Se nenhuma
das condições acima for verdadeira, adicione a terceira a ela
sua figura.
Imprima no console N número de linhas, cada linha tendo M número de números que são
o resultado das ações acima. Deixar:
• N = a soma do primeiro e segundo dígitos do número. • M =
a soma do primeiro e terceiro dígitos do número.
Dados de entrada
A entrada é lida do console e é um número inteiro no intervalo [100 … 999].
Dados de saída
Para o console imprima todos os números inteiros resultantes dos cálculos dados acima
no número apropriado de linhas e colunas como nos exemplos.
Machine Translated by Google
382 388 394 400 397 403 409 415 412 418 424 10 linhas de 9 números por
430 427 433 439 445 442 448 454 460 457 463 todos.
469 475 472 478 484 490 487 493 4 99 505 502 O número de entrada 376:
508 514 520 517 523 529 535 532 538 544 550 376 ÿ nem 5 nem 3 ÿ 376 + 6 ÿ
547 553 559 565 562 568 574 580 577 583 589 = = 382 ÿ nem 5 nem 3 ÿ 382 +
376
595 592 598 604 610 607 613 619 625 622 628 6 = = 388 + 6 = 394 + 6 =
634 640 637 643 649 655 652 658 664 670 667 400 ÿ
673 679 685 6 82 688 694 700 697 703 709 divisão por 5 ÿ 400 - 3 = 397
715 712 718
(1 + 3) = 4 e (1 + 2) = 3 ÿ 4 linhas de 3 números em
todos.
O número de entrada 132:
129 126 123
132 ÿ divisão por 3 ÿ 132 - 3 = = 129 ÿ
120 119 121
132 divisão por 3 ÿ 129 - 3 = = 126 ÿ divisão
123 120 119
por 3 ÿ 126 - 3 = = 123 ÿ divisão por 3 ÿ
121 123 120
123 - 3 = = 120 ÿ divisão por 5 ÿ 120 - 1 =
121 ÿ nem por 5 nem por 3 ÿ 121 + 2 = 123
.....
Diretrizes e dicas
Resolva a tarefa de forma independente usando o que você aprendeu nas anteriores. Lembre-se de
que você precisará definir uma variável separada para cada dígito do número de entrada.
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=ljaZHRCyZW8 .
Entrada 6 inteiros são lidos do console (um por linha): x1, y1, x2, y2, x3, y3.
• Todos os números de entrada estão no intervalo [-1000 … 1000].
Saída
Para imprimir a face do triângulo no console.
5 O lado do triângulo: a = 6 – 1
-2 = 5 A altura
6 do triângulo: h = 1 – (-2) = 3 A
7.5
1 face do triângulo:
1 S = ah / 2 = 5 3 / 2 = 7,5
* *
1
4 O lado do triângulo: a = 3 –
1 (-1) = 4 A altura
-1 do triângulo: h = 1 – (-3) = 4 A
8
-3 face do triângulo:
* *
3 -3 S = um h/2=4 4/2 = 8
Machine Translated by Google
Orientações e dicas É
extremamente importante para este tipo de tarefas, onde são submetidas algumas coordenadas,
estar atento à ordem pela qual são submetidas, bem como ponderar corretamente qual das
coordenadas vamos utilizar e de que forma. Nesse caso, as entradas são x1, y1, x2, y2, x3, y3
nessa ordem. Se não seguirmos esta sequência, a decisão torna-se errada. Primeiro, escrevemos
o código que lê
dados enviados:
Precisamos calcular o lado e a altura do triângulo. Pelas figuras, assim como pela condição
y2 = y3 , notamos que um lado é sempre paralelo ao eixo horizontal. Isso significa que seu
comprimento é igual ao comprimento do segmento entre suas coordenadas x2 e x3, que é
igual à diferença entre as coordenadas maior e menor. Da mesma forma, podemos calcular
a altura. Será sempre igual à diferença entre y1 e y2 (ou y3 desde que sejam iguais). Como
não sabemos se x2 sempre será maior que x3, ou se y1 estará abaixo ou acima do lado do
triângulo, usaremos os valores absolutos da diferença para obter sempre números positivos,
pois um segmento não pode têm um comprimento negativo.
Entrada
Saída
Para imprimir no console o número mínimo de cursos necessários para o transporte
colocando os tijolos.
Diretrizes e dicas
A entrada é padrão, e só precisamos ter cuidado com a sequência em que lemos os dados.
Machine Translated by Google
Saída
Para imprimir o resultado no console:
• Na primeira linha, imprima "in" ou "out" - se o ponto está no segmento
ou fora dela.
10
5
em 2
7
8
fora
10
3
5
fora
1
2
-2 3
Diretrizes e dicas
Lemos a entrada do console.
Como não sabemos qual ponto está à esquerda e qual está à direita, criaremos duas variáveis para nos dizer
isso. Como o ponto mais à esquerda é sempre aquele com a menor coordenada x, usaremos Math.min(…)
para encontrá-lo. Assim, o correto é sempre aquele com maior coordenada x e usamos Math.max(…).
Também encontraremos a distância do ponto x aos dois pontos. Como não sabemos a posição um em
relação ao outro, usaremos Math.abs(…) para obter
resultado positivo.
Machine Translated by Google
Resta descobrir se o ponto está dentro ou fora da linha. Um ponto estará na linha sempre
que coincidir com qualquer um dos outros dois pontos ou sua coordenada x estiver entre
eles. Caso contrário, o ponto está fora da linha. Após a verificação, enviamos uma de duas
mensagens, dependendo de qual verificação foi satisfeita.
Saída
Para imprimir no console "dentro" ou "fora" – se o ponto está dentro ou fora da forma (no
contorno está dentro).
Machine Translated by Google
11 11
em em fora fora
8 -5 6 -3 -5 2
Diretrizes e dicas
Para descobrir se o ponto está na figura, vamos dividir a figura em 2 quatros
pescador:
Basta que o ponto esteja em um deles para que ele esteja na figura.
Faremos duas verificações para saber se o ponto está dentro de um dos retângulos. Ao imprimir a mensagem,
verificaremos se alguma dessas verificações retornou true. Basta que apenas uma delas seja verdadeira
para localizar o ponto na figura.
Entrada
Saída
Imprime no console uma única linha contendo uma data daqui a 5 dias no formato dia.mês. O mês
deve ser um número de dois dígitos com um zero à esquerda, se necessário. O dia deve estar sem
um zero à esquerda.
28 27 25 26
2.04 1.01 30.01 3.03
03 12 1 02
informações do console.
Para facilitar nossas verificações, criaremos uma variável que conterá o número de dias do mês que
definimos.
Machine Translated by Google
Aumentamos o dia em 5.
Verificamos se o dia não ficou mais longo do que o número de dias do mês correspondente. Se for esse
o caso, precisamos subtrair os dias do mês do dia resultante para obter nosso dia a qual dia do próximo
mês corresponde.
Uma vez que passamos para o próximo mês, isso deve ser notado aumentando o conjunto inicial em 1.
Devemos verificar se ele se tornou maior que 12 e, em caso afirmativo, ajustar. Como não podemos pular
mais de um mês ao incrementar em 5 dias, a verificação inferior é bastante
gordo.
Resta apenas imprimir o resultado no console. É importante que formatemos a saída corretamente para
que o zero à esquerda apareça nos primeiros 9 meses. Isso é feito adicionando a string de formato %02d
ao segundo elemento. 0 indica com qual dígito preencher o espaço destinado a ele e 2 indica a quantidade
de espaços a serem preenchidos pelo dígito em questão.
solução: https://judge.softuni.bg/Contests/Practice/Index/661#4.
Conecte-se
Três inteiros são lidos no console, um por linha. Os números estão no intervalo [1 … 1000].
Saída
Machine Translated by Google
• Imprimir no console uma linha contendo a solução do problema no formato "a + b = c", onde
a, b e c estão entre os três números de entrada e a ÿ b.
• Se a tarefa não tiver solução, imprimir “Não” no console.
3 2 1 2
5 2+3=5 2 2+2=4 1 Não 6 Não
2 4 5 3
Diretrizes e dicas
Aceitamos informações do console.
Precisamos verificar se a soma de qualquer par de números é igual ao terceiro. Nós temos
três casos possíveis:
•a+b=c
•a+c=b
•b+c=a
Agora temos que descobrir a ordem em que os dois adendos serão escritos na saída do
programa. Para fazer isso, faremos uma condição aninhada que verifica qual dos dois números
é maior. No primeiro caso, acontecerá assim:
Machine Translated by Google
Da mesma forma, completaremos os outros dois casos. O código completo das verificações
e a saída do programa ficarão assim:
Tarefa: soma em 3
Dados n inteiros a1, a2, …, an. Para calcular as somas: … (soma os
a7 + passo 3). números começando do primeiro com • soma1 = a1 + a4 +
Entrada Os dados de entrada são lidos no console. A primeira linha contém um inteiro
n (0 ÿ n ÿ 1000). As próximas n linhas contêm n inteiros no intervalo [-1000 … 1000]:
a1, a2, …, an.
As 3
linhas de saída contendo as 3 somas pesquisadas devem ser impressas no console no
formato dos exemplos.
5
4
3
2 soma1 = 3 7 soma1 = 19 soma1 = 10
5
3 soma2 = 5 -2 soma2 = -2 soma2 = 13
2
5 soma3 = 0 6 soma3 = 6 soma3 = 2
7
12
8
Diretrizes e dicas
Pegaremos o número de números do console e declararemos os valores iniciais das
três somas.
Como não sabemos antecipadamente quantos números vamos processar, vamos pegá-los um a um em um loop que se
repetirá n vezes e processá-los no corpo do loop.
Para saber em qual das três somas devemos somar o número, vamos dividir seu número sequencial por três e usar o resto.
Usaremos a variável i, que controla o número de voltas do loop, para descobrir em qual número estamos. Quando o resto
de i/3 for zero, isso significa que vamos adicionar esse número à primeira soma, quando for 1 à segunda e quando for 2 à
terceira.
Machine Translated by Google
solução: https://judge.softuni.bg/Contests/Practice/Index/661#6.
Entrada
Os dados de entrada são lidos no console. Primeira linha: inteiro n (0 ÿ n ÿ 1000). Próximas n linhas: n
inteiros no intervalo [-1000 … 1000]: a1, a2, …, um.
Saída
4 4 4
3
2 1 5
5
2 8 2 2 3 6 4
2
7 4 7
4
6 4 8
Machine Translated by Google
Diretrizes e dicas
Para a solução desta tarefa, precisamos pensar um pouco mais algoritmicamente. Nos é dada uma sequência de
números e precisamos verificar se cada próximo será maior que o anterior e, em caso afirmativo, contar quanto
tempo dura a sequência em que essa condição é satisfeita. Então temos que descobrir qual linha de todas é a
mais longa. Para fazer isso, vamos fazer algumas variáveis que irão
Começamos a rolar os números e verificamos se o número a atual é maior que o aPrev anterior. Se isso for
cumprido, a linha está crescendo e precisamos aumentar seu número em 1. Salvamos isso na variável que
acompanha o comprimento da linha em que estamos atualmente, ou seja, - countCurrentLongest . Se o número
a não for maior que o anterior, significa que uma nova linha começa e devemos começar a contar a partir de 1.
Finalmente, após todas as verificações, aPrev se torna o número que estamos usando atualmente e iniciamos o
loop a partir do começando com a próxima entrada a. Aqui está um exemplo de implementação de
algoritmo descrito:
Machine Translated by Google
Resta descobrir qual de todas as linhas é a mais longa. Faremos isso verificando no
loop se a linha em que estamos atualmente se tornou mais longa do que o comprimento
da mais longa encontrada até agora. Todo o ciclo ficará assim:
Entrada
Saída
O console deve imprimir o diamante como nos exemplos.
Machine Translated by Google
Diretrizes e dicas Da
amostra de saída, podemos ver que precisaremos imprimir caracteres repetidos.
Portanto, escrevemos um método com antecedência através do qual repetiremos
mesmo símbolo quantas vezes forem necessárias.
Resta completar cada linha com o número necessário de -* elementos. Em cada linha,
precisamos adicionar i - 1 desses elementos (no primeiro 1-1 -> 0, no segundo -> 1, etc.)
Aqui está o código completo para desenhar o topo do diamante:
Para desenhar a parte inferior do diamante, precisamos virar a parte superior de cabeça
para baixo. Contaremos de n - 1, pois se começarmos em n desenharemos a linha do
meio duas vezes. Não se esqueça de alterar a etapa de ++ para --.
Aqui está o código para desenhar a parte inferior do diamante:
Resta montar todo o programa lendo primeiro a entrada, imprimindo a parte superior do
losango e depois a parte inferior do losango.
Saída
O retângulo deve ser impresso no console como nos exemplos.
%%%%%%%%%
%%%%%% %%%%%%% % % % % % ** %
%%% % % % ** % % % % ** % % % % %%%
2 % 3 % % % %% 4 % % % %%% 5 %%%%%%%
%**% %%%% %%%% %%%%%
Orientações e dicas
Nesta tarefa também notamos que teremos que imprimir o mesmo caractere várias vezes.
Para nossa conveniência, primeiro escrevemos um método que tornará a impressão do
mesmo símbolo rápida e fácil.
A primeira coisa que notamos facilmente é que a primeira e a última linhas contêm símbolos
2 * n % . Vamos começar com isso e, em seguida, desenhar o meio do
o quadrilátero.
Machine Translated by Google
A partir dos exemplos dados, vemos que o meio da figura sempre tem um número ímpar
de linhas. Notamos que quando um número par é definido, o número de linhas é igual
ao número ímpar anterior (2 -> 1, 4 -> 3, etc.). Criamos uma variável que representa o
número de linhas que nosso retângulo terá e ajustamos se o número n for par. Em
seguida, vamos desenhar o retângulo sem as estrelas. Cada linha começa e termina
com o símbolo % e entre eles 2 * n - 2 espaços (a largura é 2 * n e subtraímos 2 para
os dois percentuais no final). Não se esqueça de mover o código para a última linha
após o loop.
Podemos executar e testar o código até aqui. Tudo sem os dois asteriscos no meio deve
funcionar corretamente.
Agora resta adicionar os asteriscos no corpo do ciclo. Vamos verificar se estamos na fila
do meio. Se estivermos no meio, traçaremos a linha junto com os asteriscos, caso
contrário, traçaremos uma linha normal. A linha com os asteriscos tem n - 2 espaços em
branco (n é metade do comprimento e removemos o asterisco e a porcentagem), duas
estrelas e novamente n - 2 espaços em branco. Deixamos os dois por cento no início e
no final da linha fora do cheque.
Machine Translated by Google
Entrada A entrada contém dois inteiros aeb no intervalo [0 … 1000], um por linha.
Saída
A saída contém todos os quads pesquisados, em ordem crescente, um por
ordem.
3456
3457
3 10
3467 Não 10 11 12 13
7 57 13
3567
4567
Podemos testar o programa não escrito para ver se ele está correto até este ponto. Deve
imprimir todos os pares de números i, j para os quais i ÿ j.
Como cada número subsequente na sequência deve ser maior que o anterior, o segundo
loop girará de i + 1 (o próximo número maior). Assim, se não houver sequência de dois
números crescentes (a e b são iguais), o segundo ciclo
não será executado e nada será impresso no console.
Os retângulos são definidos por seus cantos superior esquerdo e inferior direito. As seguintes desigualdades
são válidas:
• -n ÿ esquerda < direita
ÿ n • -n ÿ superior < inferior ÿ n
Conecte-se
Saída
• Os retângulos descritos no formato devem ser impressos no console
como nos exemplos abaixo.
Diretrizes e dicas
Vamos ler a entrada do console. Também criaremos um contador no qual manteremos o número de
retângulos encontrados.
Machine Translated by Google
É extremamente importante poder visualizar a tarefa antes de começar a resolvê-la. No nosso caso,
somos obrigados a procurar retângulos em um sistema de coordenadas. O que sabemos é que o ponto
esquerdo sempre terá uma coordenada x menor que o ponto direito. Assim, o superior sempre terá uma
coordenada y menor que o inferior. Para encontrar todos os retângulos teremos que fazer um loop
semelhante ao do problema anterior, mas desta vez nem todos os loops subsequentes serão
começa no próximo número porque algumas das coordenadas podem ser iguais
(por exemplo, esquerda e superior).
solução: https://judge.softuni.bg/Contests/Practice/Index/661#11.
Machine Translated by Google
Vídeo
Assista a um tutorial em vídeo sobre este capítulo: https://youtube.com/watch?v=m9OscwPmZQE.
Tarefas de exame
Tradicionalmente, o vestibular SoftUni consiste em 6 tarefas práticas de programação:
Tarefa: distância
Escreva um programa para calcular quantos quilômetros percorre um carro para o qual
conhecemos a velocidade inicial (km/h), o tempo em minutos após o qual ele aumenta a velocidade
em 10%, uma segunda vez após o qual diminui a velocidade em 5% , e o tempo até o final da
viagem. Para encontrar a distância, você precisa converter minutos em horas (por exemplo, 70
minutos = 1,1666 horas).
Dados de entrada
4 linhas são lidas no console:
• A velocidade inicial em km/h – um inteiro no intervalo [1 … 300]. • A primeira vez
em minutos – um número inteiro no intervalo [1 … 1000]. • A segunda vez
em minutos – um número inteiro no intervalo [1 … 1000]. • A terceira vez em
minutos – um número inteiro no intervalo [1 … 1000].
Dados de saída
Machine Translated by Google
Para imprimir um único número no console: os quilômetros percorridos, formatados com o segundo
caractere após a vírgula.
*
Distância com velocidade inicial: 90 km/h min) = 90 km 1 vez (60
Após o aumento:
90 *
90 + 10% = 99,00 km/h (70 min) = 115,50 km Após a 1.166 horas
60
330,90 diminuição: 99 - 5% =
70 *
94,05 km/h min) = 125,40 km Total percorrido: 330,9 1,33 horas (80
80
km
*
Distância com velocidade inicial: 140 km/h (112 min) = 1,86 horas
261,33 km Após a subida:
140 *
140 + 10% = 154,00 km/h (75 min) = 192,5 km Após a 1,25 horas
112
917.12 descida: 154,00 - 5% =
75 *
146,29 km/h ( 190 min) = 463,28 km Total percorrido: 3,16 horas
190
917,1166 km
Diretrizes e dicas
É provável que tal condição possa parecer à primeira vista confusa e incompleta, adicionando complexidade
adicional a uma tarefa simples. vamos dividir
definindo várias subtarefas e tentando resolver cada uma delas, o que nos levará ao resultado final:
A parte essencial da lógica do programa é calcular qual será a distância percorrida após todas as mudanças
de velocidade. Como durante a execução do programa alguns dos dados à nossa disposição mudam,
poderíamos dividir o código do programa em várias partes logicamente distintas:
Por padrão, os dados de entrada são inseridos em quatro linhas separadas, portanto,
devemos executar o código anterior quatro vezes no total.
Calculamos o tempo decorrido (em horas) dividindo o tempo por 60 (os minutos em uma hora). Encontramos a
distância percorrida multiplicando a velocidade inicial pelo tempo decorrido (em horas). Em seguida, alteramos a
velocidade aumentando-a em 10% por condição. Calculamos as porcentagens, bem como as seguintes distâncias,
da seguinte forma:
Até este ponto, conseguimos concluir duas das subtarefas mais importantes, ou seja, receber os dados e processá-
los. Resta calcular o resultado final. Como a condição exige que seja formatado com 2 casas decimais, podemos
fazer assim:
Caso você tenha trabalhado corretamente e executado o programa com os dados de entrada
da condição da tarefa, você verificará se está funcionando corretamente.
Haralambi tem dinheiro arrecadado para substituir os ladrilhos do piso do banheiro. Como o piso é um
retângulo e os ladrilhos são triangulares. Escreva um programa para calcular se o dinheiro arrecadado será
suficiente para ele. Eles são amplamente lidos no console
o nível e o comprimento do piso, bem como um lado do triângulo com a altura. Você precisa calcular
quantos ladrilhos são necessários para cobrir o chão. O número de ladrilhos deve ser arredondado para um
número inteiro maior e mais 5 ladrilhos adicionados por turno. O console também lê - o preço de um
ladrilho e o valor do trabalho de um artesão.
1000 *
Área do piso ÿ 5,55 Área do 8,95 = 49,67249
5,55 *
ladrilho ÿ 0,9 0,85 / 2 = 0,3825 Ladrilhos necessários ÿ
8,95 Você vai
49,67249 / 0,3825 = 129,86... = 130 + 5 fira = 135 Valor total ÿ 135
0,90 precisar de 1209,65 lv
13,99 + 321 (master) =
0,85 mais.
2209,65 2209,65 > 1000 ÿ sem alcance BGN 1209,65
13,99
321
500 *
Área do piso ÿ 3 Área 2,5 = 7,5
*
do ladrilho ÿ 0,5 Ladrilhos 0,7 / 2 = 0,175
3
25,60 lv necessários ÿ 7,5 / 0,175 = 42,857... = 43 + 5 fira = 48 Valor total ÿ 48
2,5
restante. 7,8 + 100
0,5
(mestre) = 474,4 474,4 *< 500 ÿ 25,60 BGN restantes
0,7
7,80 100
Machine Translated by Google
Diretrizes e dicas
A próxima tarefa exige que nosso programa aceite mais entradas e execute um número maior de cálculos,
mesmo que a solução seja idêntica. Aceitamos os dados do usuário da nossa maneira conhecida.
Observe que na seção de entrada da condição é mencionado que todas as entradas serão números reais
e, portanto, usaríamos o tipo double.
Agora que temos tudo o que precisamos para implementar a lógica do programa, podemos prosseguir
para a próxima parte. Como poderíamos calcular o número necessário de ladrilhos que seriam suficientes
para cobrir todo o piso? A condição de que as telhas tenham uma forma triangular pode levar a confusão,
mas na prática a tarefa se resume a cálculos muito simples. Poderíamos calcular qual é a área total do
piso pela fórmula para
encontrar a área de um retângulo e qual é a área de um ladrilho usando a fórmula de triângulo apropriada.
Para calcular quantos ladrilhos são necessários, dividimos a área do piso pela área de um ladrilho
(lembrando de adicionar 5 ladrilhos extras conforme a condição).
Podemos chegar ao resultado final calculando o valor total necessário para cobrir todo o piso adicionando
o custo das telhas ao custo do artesão que temos a partir dos dados de entrada. Podemos supor que o
custo total das telhas pode ser obtido multiplicando o número de telhas pelo preço por telha. Se o valor
que temos disponível será suficiente, dividimos comparando o dinheiro arrecadado até agora (a partir dos
dados de entrada) e o total
despesas.
Nos feriados, os preços de todas as flores aumentam 15%. Estão disponíveis os seguintes
descontos:
• Na compra de mais de 7 tulipas na primavera - 5% do preço do buquê inteiro. • Na compra de
10 ou mais rosas no inverno - 10% do valor do buquê inteiro.
• Para compra de mais de 20 flores no total em todas as estações - 20% do preço de
todo o buquê.
Os descontos são feitos no pedido assim escrito e podem ser acumulados! Todos os descontos
se aplicam após o aumento do preço do feriado!
O preço para arrumar o buquê é sempre BGN 2. Escreva um programa que calcule o preço de
um buquê.
Dados de entrada
A entrada é lida do console e contém exatamente 5 linhas:
• A primeira linha é o número de crisântemos comprados - um inteiro [0 ... 200]. • Na
segunda linha está o número de rosas compradas - um inteiro [0 … 200]. • Na
terceira linha está o número de tulipas compradas - um inteiro [0 … 200]. • A quarta
linha mostra a estação - [Primavera, Verão, Outono, Inverno]. • A quinta linha indica se
o dia é feriado – [S - sim / N - não].
Dados de saída
Para imprimir no console 1 número - o preço das flores, formatado para o segundo caractere após
o ponto decimal.
Diretrizes e dicas
Depois de ler atentamente a condição, entendemos que teremos que realizar cálculos simples
novamente, mas com a diferença de que desta vez serão necessárias verificações mais
lógicas. Devemos prestar mais atenção quando as alterações finais de preço são feitas para
que possamos construir adequadamente nossa lógica de programa. Novamente, o texto em
negrito nos dá ampla orientação sobre como abordá-lo. Para começar, separamos os valores
já definidos em variáveis, como fizemos nas tarefas anteriores:
Vamos pensar na forma mais adequada de estruturar nosso programa de lógica. Fica
claro pela condição que o caminho do programa é basicamente dividido em duas partes:
primavera/verão e outono/inverno. Fazemos a divisão com uma condicional
construção atribuindo previamente variáveis aos preços das flores individuais, bem como
ao resultado final.
Resta-nos fazer várias verificações nas reduções dos diferentes tipos de flores, consoante
a época, e modificar o resultado final.
Desafio: Notas
Escreva um programa para calcular as estatísticas das notas do exame. No início, o
programa recebe o número de alunos que fizeram o exame e para cada aluno sua nota.
Ao final, o programa deverá imprimir a porcentagem de alunos com notas entre 2,00 e
2,99, entre 3,00 e 3,99, entre 4,00 e 4,99, 5,00 ou superior, e o GPA no exame.
Dados de entrada
Uma série de números são lidos no console, cada um em uma linha separada:
• Na primeira linha - o número de alunos que fizeram o exame - um número inteiro entre
eixo [1 … 1000].
• Para cada aluno em uma linha separada - a nota do exame - um número real
no intervalo [2,00 ... 6,00].
Dados de saída
Imprima no console 5 linhas que contêm as seguintes informações: • "Alunos
melhores: {porcentagem de alunos com GPA 5,00 ou superior}%". •
"Entre 4,00 e 4,99: {entre 4,00 e 4,99 inclusive}%".
Machine Translated by Google
10
3,00
2,99 5 e acima - três = 30% de 10 Entre
5,68 Melhores alunos: 30,00% 4,00 e 4,99 - três = 30% de 10 Entre 3,00 e 3,99
3,01 Entre 4,00 e 4,99: 30,00% Entre 3,00 - dois = 20% de 10 Abaixo de 3 - dois = 20% de
4 e 3,99: 20,00% Reprovação: 20,00% 10 O sucesso médio é: 3 + 2,99
Média: 4,06 + 5,68 + 3,01 + 4 + 4 + 6 + 4,50 + 2,44 + 5
4 = 40,62 / 10 = 4,062
6,00
4,50
2,44 5
Entrada Saída
6
2 Melhores alunos: 33,33%
3 Entre 4,00 e 4,99: 16,67% Entre 3,00
4 e 3,99: 16,67% Reprovação: 33,33%
Média: 3,70
5
6 2.2
Diretrizes e dicas
Da condição vemos que primeiro nos será dado o número de alunos e só depois suas notas. Por
esse motivo , primeiro leremos o número de alunos em uma variável int . Para ler e processar as
próprias notas, usaremos um loop for. O valor da variável int será o valor final da variável i do loop.
Dessa forma, todas as iterações do loop lerão todas as avaliações.
Machine Translated by Google
Antes de executar o código do loop for , separamos variáveis nas quais manteremos o
número de alunos de cada grupo: notas baixas (até 2,99), notas de 3 a 3,99, de 4 a 4,99
e notas acima de 5. precisaremos mais de uma variável para armazenar a soma de todas
as notas, com a ajuda da qual calcularemos a nota média de todos os alunos.
Viramos o loop e nele declaramos outra variável na qual armazenaremos o valor atual
inserido. A variável será do tipo double e a cada iteração verificamos qual é o seu valor.
De acordo com este valor, aumentamos em 1 o número de alunos do grupo correspondente,
não esquecendo de aumentar a soma total das notas, que também monitorizamos.
Moldamos o resultado final da nossa maneira bem conhecida até o segundo símbolo após
a vírgula.
Dados de entrada
A entrada é lida do console - um único inteiro n no intervalo [3 … 100].
Dados de saída
Para imprimir um gorro de Natal na consola, tal como nos exemplos.
4 7
\|/....... .......***...... . ......*-*-*...... .....*--*--*..... ....*---*---*.. .. ...*----*----*... ..*-----*-
.*------*------*. ....*--------*-----*....
*-------*-------* ...*----------*----------*... ..*-----------
***************** *------ -----*..*------------*------------*.
*.*.*.*.*.*.*.*.*
***************** *-------------*-------------*
*****************************
*.*.*.*.*.*.*.*.*.*.*.*.*.*.*
*****************************
Diretrizes e dicas
Nas tarefas de desenho do console, na maioria das vezes o usuário insere um número
inteiro relacionado ao tamanho total da figura que precisamos desenhar. Como a
condição menciona como calcular o comprimento e a largura totais da figura, podemos
usá-los como pontos de partida. A partir dos exemplos, fica claro que não importa quais
sejam os dados de entrada, sempre temos as duas primeiras linhas que são quase
idênticas em conteúdo.
......./|\..... .......\|/.....
Também notamos que as últimas três linhas estão sempre presentes, duas das quais
são exatamente iguais.
Machine Translated by Google
*****************
*.*.*.*.*.*.*.*.*
*****************
A partir dessas observações podemos derivar a fórmula para a altura da parte variável
esquerda do chapéu de Natal. Usamos a fórmula condicional para a altura total
subtraindo a magnitude da parte constante. Obtemos (2 * n + 5) – 5 ou 2 *
n.
Usaremos um loop para desenhar a parte dinâmica ou variável da forma. O tamanho
do loop será de 0 até a largura que temos por condição, que é 4 * n + 1. Como usaremos
essa fórmula em vários lugares do código, é uma boa prática exportá-la para uma
variável separada . Antes de executar o loop, devemos separar variáveis para o número
de caracteres individuais que estão envolvidos na parte dinâmica: pontos e traços. Ao
estudar os exemplos, podemos derivar fórmulas para os valores iniciais dessas variáveis
também. Os traços são inicialmente 0, mas o número de pontos é claramente visto como
obtido subtraindo 3 da largura total (o número de caracteres que compõem o topo do
gorro de Natal) e depois dividindo por 2, pois o número
.......***....... ......*-*-
*...... .....*--*--
*.... . ....*---*---*....
...*----*----*...
..*-----*-----*..*------
*------*.
*-------*-------*
• Estrela
travessões •
Dados de entrada
A entrada é lida no console e contém exatamente 3 linhas: • Uma letra
minúscula do alfabeto inglês para iniciar o intervalo - de 'a' a 'z'. • Letra minúscula do alfabeto inglês para
terminar o espaço - da primeira letra
para 'z'.
• Uma letra minúscula do alfabeto inglês – de 'a' a 'z' – e as combinações que contêm essa
letra são ignoradas.
Dados de saída
Imprima em uma linha todas as combinações que atendem à condição, seguidas de seu número, separadas por
um espaço.
Todas as combinações possíveis das letras 'a', 'b' e 'c' são: aaa aab aac
aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa
a
aa aac aca acc cab cac cba cbb cbc cca ccb ccc
c
caa cac cca ccc 8
b Combinações contendo 'b' não são válidas.
Conecte-se Saída
a
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac
c
cba cbb cbc cca ccb ccc 27
Com
Machine Translated by Google
Conecte-se Saída
fff ffg ffi ffj ffk fgf fgg fgi fgj fgk fif fig fii fij fik fjf fjg fji fjj fjk fkf fkg fki fkj fkk gff gfg
gfi gfj gfk ggf ggg ggi ggj ggk gif gig gii gij gik gjf gjg gji gjj gjk gkf gkg gki gkj
gk k Iff ifg ifi ifg igf igf igk igk iii iig ijf ijg Ija ijk IKF IKJ IKJ IKJ IKJ IKJ IKJ IKJ
fk IKJ IKJ iKJ JFG JFG JFJ JFJ JFJ JGJ JGJ JGJ JGJ JGJ JF JIK JIK JJJF Jjjk
Jjjk J KG JKG JKG Jkj Jkj Jkjj kff kfg kfi kfj kfk kgf kgg kgi kgj kgk kif kig kii kij
kik kjf kjg kji kjj kjk kkf kkg kki kkj kkk
Diretrizes e dicas
Para a última tarefa, temos por padrão dados de entrada de 3 linhas, que são representadas
por um caractere cada da tabela ASCII (http://www.asciitable.com/). Poderíamos usar as
funções já definidas na linguagem Java para ler um único caractere do console e armazená-
lo em uma variável do tipo char:
Vamos pensar em como poderíamos chegar ao resultado final. Se a condição da tarefa for
imprimir todos os caracteres do início ao fim (omitindo uma determinada letra), como
faríamos? A maneira mais fácil e conveniente é usar um loop,
passando por todos os caracteres e imprimindo aqueles que são diferentes da letra que
precisamos pular. Uma das vantagens da linguagem Java é que temos a capacidade de
a máquina.
Usamos um loop que percorre todos os caracteres desde o início até a letra final, inclusive.
A cada iteração do primeiro loop, executamos um segundo com os mesmos parâmetros
(mas somente se a letra do primeiro loop for válida, ou seja, não corresponder ao
Machine Translated by Google
que devemos excluir por condição). A cada iteração do segundo loop, executamos outro com os mesmos parâmetros e
a mesma verificação. Assim você vai
temos três loops aninhados, e no corpo do último vamos imprimir
os símbolos.
Não esqueçamos que também somos obrigados a imprimir o número total de combinações válidas que encontramos e
que devem ser impressas na mesma linha, separadas por um espaço.
• uma matriz gerada por uma espiral numérica, definida como uma travessia espiral (direita, baixo, esquerda,
cima, direita, baixo, esquerda, cima, etc.) de uma matriz de números, começando de seu centro com um
determinado número de semente e passo em incrementos, com os números atuais na linha sendo
registrados cada vez que fazemos uma curva
Escrever um programa que encontre o primeiro número que aparece em ambas as linhas assim definidas.
Exemplo
Deixe a série Tribonacci começar com 1, 2 e 3. Isso significa que a primeira série conterá os números 1, 2, 3, 6,
11, 20, 37, 68, 125, 230, 423, 778, 1431, 2632, 4841, 8904, 16377, 30122, 55403, 101902, etc.
Dados de entrada
Os dados de entrada são 5 números inteiros,
que são lidos no console.
Machine Translated by Google
Os dados de entrada serão sempre válidos e estarão sempre no formato descrito. Não há necessidade
de verificá-los.
Dados de saída
O resultado deve ser impresso no console. Na única linha de saída
você deve imprimir o menor número que ocorre em ambas as sequências. Se não houver nenhum
número no intervalo [1 … 1.000.000] que ocorra em ambas as sequências, imprima "Não".
Limites
• Todos os números na entrada estarão no intervalo [1 … 1.000.000].
1 13 99 1
2 25 99 4
3 37 99 13 99 Não 7 23
5 2 23
2 52 2 3
Diretrizes e dicas
A tarefa parece bastante complexa, então vamos dividi-la em subtarefas mais simples.
processamento de entrada
O primeiro passo para resolver o problema é ler e processar a entrada. A entrada consiste em 5 números
inteiros: 3 para a série de Tribonacci e 2 para a hélice numérica.
Uma vez que temos os dados de entrada, precisamos pensar em como vamos gerar números
assim em ambas as linhas.
Machine Translated by Google
*
Então vemos que para os dois primeiros temos o último número + 1 passo, para os próximos
*
dois somamos 2 passos e assim por diante. Toda vez que queremos que chegue
mudo para o próximo número da espiral, realizaremos tais cálculos.
O que precisamos cuidar é que a cada dois números nosso multiplicador (vamos chamá-lo de
"coeficiente") é incrementado em 1 (spiralStepMul++), o que pode
Machine Translated by Google
Faremos a busca no segundo array de forma linear, e para os mais curiosos, vamos deixar
que otimizem usando a técnica chamada busca binária, já que o segundo array é gerado
ordenado, ou seja, atende ao requisito para aplicar esse tipo de pesquisa. O código para
encontrar nossa solução será
parece que:
Machine Translated by Google
A solução do problema usa matrizes para armazenar os valores. Arrays não são
necessários para resolver o problema. Existe uma solução alternativa que gera os
números e trabalha com eles diretamente, em vez de armazená-los em uma matriz.
Podemos verificar a cada passo se os números nas duas linhas correspondem. Se for
esse o caso, imprimiremos o número no console e encerraremos a execução do nosso
programa. Caso contrário, veremos qual número atual da linha é menor e geraremos a
próxima, onde estamos "atrás". A ideia é que vamos gerar números a partir da linha que
está "atrás" até passarmos o número atual para a outra linha e depois para a outra linha
e, se encontrarmos uma correspondência nesse meio tempo, encerraremos a execução.
Usaremos um calendário tradicional (os anos têm 12 meses, cada mês tem 28, 29, 30 ou 31
dias).
2007 17-03-2007
2007 13-07-2007 01-09-2013
144 31-07-2007 17-01-2013
23-03-2013
07-11-2013
Conecte-se Saída
09-01-2013
2003 09-10-2013
2012
2004 Não 10-09-2013
2014
1500 17-10-2013
80
11-07-2013
24-11-2013
Conecte-se Saída 14-12-2013
01-01-2011 23-11-2014
2011 13-12-2014
01-10-2011
2012 31-12-2014
10-01-2011
14
10-10-2011
Dados de entrada
Os dados de entrada devem ser lidos no console. Eles consistem em 3 linhas:
• A primeira linha contém um número inteiro: ano inicial. • A segunda
Dados de saída
O resultado deve ser impresso no console como datas consecutivas no formato "dd-mm-aaaa",
organizadas em ordem alfabética. Cada string deve estar em uma linha separada. Caso não
existam datas mágicas, imprimimos "Não".
Limites
• Os anos inicial e final são números inteiros no intervalo [1900-2100]. • O peso mágico é um
Diretrizes e dicas
Começamos com os dados de entrada. Neste caso, temos 3 inteiros a serem lidos do
console, esgotando assim a digitação e o processamento da entrada para a tarefa.
Ao ter o ano de início e fim, é bom saber como vamos passar por cada data sem nos
confundirmos com quantos dias tem um mês e se é um ano bissexto, etc.
Assim que tivermos a data de início, queremos fazer um loop que seja executado até
ultrapassarmos o ano final (ou até passarmos 31 de dezembro no ano final, se estivermos
comparando datas inteiras), incrementando 1 dia a cada etapa.
Nota: podemos obter o mesmo resultado com um loop for, a inicialização da data vai na
primeira parte do for, a condição é salva e o passo é incrementar o net em 1 dia. Além
disso, a condição pode ser substituída tornando a variável de data final, por exemplo. 31
de dezembro no último ano e ser comparado diretamente
ambas as datas.
cálculo de peso
Machine Translated by Google
Cada data consiste em exatamente 8 caracteres (dígitos): 2 para o dia (d1, d2), 2 para o mês
(d3, d4) e 4 para o ano (d5 a d8). Isso significa que teremos o mesmo cálculo todas as vezes
e podemos tirar vantagem disso para definir a fórmula estaticamente (ou seja, não fazer um
loop referenciando diferentes dígitos da data, mas escrever a fórmula inteira). Para poder
escrevê-la, precisaremos de todos os dígitos da data em variáveis separadas para fazer todas
as multiplicações necessárias. Usando as operações de divisão e resto nos componentes de
data individuais, via getDayOfMonth(), getMonthValue() e getYear(), podemos recuperar
cada dígito.
Vamos também explicar uma das linhas mais interessantes aqui. Vamos tomar como exemplo
o segundo dígito do ano (d6). Com ele, dividimos o ano por 100 e tiramos 10 de resto. O que
alcançamos? Primeiro, dividindo por 100, retiramos os 2 últimos dígitos do ano (exemplo:
2018 / 100 = 20). Com o resto da divisão por 10, pegamos o último dígito do número resultante
(20% 10 = 0) e assim obtemos 0, que é o segundo dígito de 2018.
Resta fazer o cálculo que nos dará o peso mágico de uma determinada data. Para evitar
escrever todas as multiplicações conforme mostrado no exemplo, aplicaremos um agrupamento
simples. O que precisamos fazer é multiplicar cada dígito pelos que o seguem.* Em vez de
* *
escrever d1 d2 + d1 * (d2 + d3 + + d8), seguindo a matemática d8, podemos d3 + … + d1
…
agrupamento tchecas quando temos abreviar essa expressão para d1 Regras de
multiplicação e adição. Aplicando a mesma simplificação às restantes multiplicações, obtemos
a seguinte fórmula:
Observação: como estamos percorrendo as datas do ano inicial ao ano final, elas sempre
serão classificadas em ordem crescente, conforme a condição. Por fim, se
não encontrarmos nenhuma data que corresponda às condições, teremos um valor falso na
variável encontrada e poderemos imprimir No.
peso('à') = 5; peso('b')
= -12; peso('c') = 47;
peso('d') = 7; peso('e')
= -32;
O peso da sequência de letras c1c2…cn é calculado removendo todas as letras repetidas (da
direita para a esquerda) e calculando a fórmula:
… +n *
peso(c1c2…cn) = 1 * peso(c1) + 2 * peso(c2) + peso(cn)
* * * *
Outro exemplo: peso("cadea") = peso("cade") = 1 47 + 2 5+3 7-4 32 = -50.
Machine Translated by Google
Dados de entrada
Os dados de entrada são lidos no console. Eles consistem em duas linhas:
• O número inicial está na primeira linha. • O
número final está na segunda linha. Os
dados de entrada serão sempre válidos e estarão sempre no formato descrito. Não há
necessidade de verificá-los.
Dados de saída
O resultado deve ser impresso no console como uma série de strings em ordem alfabética.
Cada string deve ser separada da próxima por um único espaço. Se o peso de qualquer uma
das sequências de 5 letras não existir no intervalo especificado, imprima "Não".
Limites
• Os números inicial e final devem ser inteiros no intervalo [-10000 … 10000]. • Tempo de
trabalho permitido para o programa: 0,25 segundos. • Memória
permitida: 16 MB.
40 peso("bcead") = 41 300
bcead bdcea Não
42 peso("bdcea") = 40 400
Diretrizes e dicas
Como qualquer tarefa, iniciamos a solução lendo e processando os dados de entrada. Neste
caso, temos dois inteiros que podemos processar com uma combinação dos métodos
Integer.parseInt(…) e Scanner.nextLine().
Machine Translated by Google
e para cada dígito pegamos a letra da posição específica. Assim, o número 00000 se
tornará "aaaaa", o número 02423 se tornará "acecd". Podemos fazer a string de 5 letras
assim:
Machine Translated by Google
Depois faremos o mesmo com os outros 4, verificando a cada vez se existem com a
seguinte condição e o método .indexOf(…). Isso pode ser feito com um loop fullWord
(deixamos isso para o leitor para um exercício) ou pode ser feito de maneira preguiçosa
com copiar e colar.
Uma vez que tenhamos o valor da letra dada, devemos multiplicá-la por sua posição.
Como os índices na string diferem em 1 das posições reais, ou seja, índice 0 é a posição
1, índice 1 é a posição 2, etc., adicionaremos 1 a
os índices.
Quaisquer resultados intermediários obtidos devem ser adicionados a um total para cada
letra da combinação de 5 letras.
Formatando a saída
Se uma palavra deve ser impressa é determinado pelo seu peso. Precisamos de uma
condição que determine se o peso atual está no intervalo [start … end] que nos foi dado
na entrada no início do programa. Em caso afirmativo, imprima a palavra completa
(fullWord).
Tenha cuidado para não imprimir a palavra de letras únicas. Só precisávamos disso para
calcular o peso!
As palavras são separadas por um espaço e vamos acumulá-las em um resultado
variável intermediário, que é definido como uma string vazia no início.
Toques finais
A condição é satisfeita, exceto nos casos em que não temos nenhuma palavra no intervalo
dado. Para descobrir se encontramos tal palavra, podemos simplesmente verificar se a
string resultante tem seu valor inicial (ou seja, uma string vazia), se sim - imprimimos
Não, caso contrário, imprimimos a string inteira sem o último espaço usando o .trim ()
método.
Na primeira linha da entrada, será inserido o valor que Lina tem antes de começar a fazer compras.
Então, ao receber o comando "mall.Enter", Lina entra no shopping e começa a fazer compras até
receber o comando "mall.Exit". Quando Lina começar a fazer compras, em cada linha da entrada você
obterá strings que representam ações que Lina realiza. Cada caractere na string representa uma compra
ou outra ação. Os comandos de string podem conter apenas caracteres da tabela ASCII. O código ASCII
de cada personagem tem relação com quanto Lina tem que pagar por cada item. Interprete os símbolos
por
da seguinte maneira:
• Se o símbolo for uma letra maiúscula, Lina obtém uma redução de 50%, ou seja, você deve reduzir
o dinheiro que ela possui em 50% da representação numérica do símbolo da tabela ASCII.
• Se o símbolo for uma letra minúscula, Lina obtém uma redução de 70%, ou seja, você deve reduzir
o dinheiro que ela possui em 30% da representação numérica do símbolo da tabela ASCII.
• Se o símbolo for "%", Lina faz uma compra que reduz seu dinheiro pela metade. • Se o símbolo for
• Caso o símbolo seja diferente dos citados acima, a Lina apenas efetua uma compra sem descontos
e nesse caso é só subtrair o valor do símbolo de
tabela ASCII de seus recursos disponíveis.
Se algum dos valores da compra for superior aos fundos disponíveis atualmente, a Lina NÃO efetua a
compra. O dinheiro de Lina não pode ser menor que 0.
Machine Translated by Google
As compras terminam quando o comando "mall.Exit" é recebido. Quando isso acontecer, você
deve imprimir o número de compras feitas e o dinheiro que está no saldo de Lina.
Dados de entrada
Os dados de entrada devem ser lidos no console. Na primeira linha da entrada, será inserido o
valor que Lina tem antes de começar a fazer compras. Cada linha subseqüente terá um comando
específico. Ao receber o comando "mall.Enter", em cada linha subsequente você receberá
strings contendo informações sobre as compras/ações que Lina deseja realizar. Essas strings
continuarão a ser enviadas até que o comando "mall.Exit" seja recebido.
Dados de saída
A saída deve ser impressa no console. Quando a compra for concluída, determinada saída deve
ser impressa no console, dependendo de quais compras foram feitas.
• Se nenhuma compra foi feita – "Sem compras. Dinheiro restante: {dinheiro restante} lv." • Se
pelo menos uma
compra foi feita - "{número de compras} compras. Dinheiro restante: {dinheiro restante} lv."
Limites
• Dinheiro é um número de ponto flutuante no intervalo: [0 - 7,9 x 1028]. • O
número de strings entre "mall.Enter" e "mall.Exit" estará no intervalo: [1-20]. • O número de
caracteres em cada string que representa um comando será c
intervalo: [1-20]. •
Tempo de execução permitido: 0,1 segundos. • Memória
permitida: 16 MB.
110 'd' tem código ASCII 100. 'd' é uma letra minúscula e
mall.Enter 1 compras.
por isso Lina ganha 70% de desconto e então ela
Dinheiro
restante: 80,00 lv.
gasta 30% 100* = BGN 30. Após a compra ela tem 110
d mall.Exit - 30 = BGN 80 sobrando.
Machine Translated by Google
100
110
1 compras. mall. Enter 2 compras.
shopping.Entrar
Dinheiro Ab Dinheiro
% **
restante: 55,00 lv. restante: 58,10 lv.
shopping.Sair
shopping
Diretrizes e dicas
Dividiremos a solução da tarefa em três partes principais:
• Processamento de
entrada • Algoritmo de solução
• Formatação de saída Vejamos
cada parte em detalhes.
Processamento de entrada A
entrada para nossa tarefa consiste em vários componentes:
• Na primeira fila temos todo o dinheiro que Lina usará para fazer compras.
• Em cada linha subseqüente teremos algum tipo de comando.
A primeira parte da leitura é trivial, a única coisa que precisamos prestar atenção é o uso do tipo
BigDecimal , ou seja, trabalhamos com dinheiro e precisamos de muita precisão:
Mas no segundo há um detalhe que temos que levar em conta. A condição é a seguinte:
Cada linha subseqüente terá um comando específico. Quando você receber o comando
"mall.Enter", em cada linha subsequente você obterá strings contendo informações sobre
as compras/ações que Lina deseja fazer.
Aqui é o ponto onde temos que considerar que a partir da segunda linha temos que começar a ler
os comandos, mas só depois de pegarmos o comando "mall.
Enter", precisamos começar a processá-los. Como fazer? Usar um loop while ou do-while é
uma boa escolha. Aqui está um exemplo de solução de como podemos pular todos os comandos
antes de obter o comando "mall.Enter":
Machine Translated by Google
Aqui devemos observar que a chamada scanner.nextLine() após o final do loop é usada
para pular para o primeiro comando de processamento.
• Se o símbolo for "*", Lina saca dinheiro de seu cartão de débito e acrescenta
fundos disponíveis BGN 10.
• Caso o personagem seja diferente dos citados acima, Lina simplesmente faz uma compra
sem descontos, nesse caso basta subtrair o valor do personagem ASCII do seu saldo
disponível.
Machine Translated by Google
Consideremos os problemas da primeira condição diante de nós. Uma é como podemos saber se um caractere
é uma letra maiúscula. Pudermos
para usar uma das duas maneiras:
• Dado que as letras do alfabeto têm uma ordem, podemos usar a seguinte ação de verificação >= 'A' &&
ação <= 'Z' para verificar se nosso caractere está no intervalo de letras maiúsculas. • Podemos usar a
função Character.isUpperCase(…).
O outro problema é como podemos pular um símbolo se ele representa uma operação que requer mais dinheiro
do que Lina possui. Isso pode ser feito usando a construção continue . Um exemplo de verificação para a
primeira parte da condição se parece com isto:
Nota: as compras são uma variável do tipo compras int . , em que mantemos a contagem de todos
Acreditamos que o leitor não deve ter nenhum problema com a implementação
de todas as outras verificações porque são muito semelhantes à primeira.
• Se pelo menos uma compra foi feita – "{número de compras} compras. Dinheiro restante:
{dinheiro restante} lv."
As operações de impressão são triviais, a única coisa a ter em conta é que o dinheiro deve ser impresso com
uma precisão de 2 casas decimais.
Como podemos fazer isso? Deixaremos a resposta a esta pergunta para o leitor.
Exemplo
A expressão
Bonnie é muito bonita, mas não tão inteligente, então ela precisa de nossa ajuda para
dominar o poder das Expressões.
Dados de entrada
Os dados de entrada consistem em uma única linha que é alimentada pelo console.
Contém a expressão matemática para o cálculo. A linha sempre termina com o caractere
"=". O símbolo "=" indica o fim de uma expressão matemática.
Machine Translated by Google
Os dados de entrada são sempre válidos e no formato descrito. Eles não precisam ser
validados.
Dados de saída A
saída deve ser impressa no console. A saída consiste em
uma linha – o resultado da expressão matemática calculada.
Limites
• As expressões terão no máximo 2.500 caracteres. • Os
números de cada expressão matemática estarão no intervalo [1 … 9]. •
Os operadores em expressões matemáticas serão sempre + (adição), - (subtração), /
(divisão) ou * (multiplicação). • O resultado da expressão
matemática estará no intervalo [-100000,00 …
100.000,00].
• Tempo de execução permitido: 0,1 segundos. • Memória
permitida: 16 MB.
Diretrizes e dicas
Como de costume, primeiro leremos e processaremos a entrada, depois resolveremos o
problema e, finalmente, imprimiremos o resultado, formatado conforme necessário.
Processamento de entrada
Os dados de entrada consistem em exatamente uma linha do console. Aqui temos duas
maneiras de processar a entrada. A primeira é lendo a linha inteira com o comando
bufferReader.readLine() (onde bufferReader é uma variável do tipo BufferedReader)
e acessando cada caractere (char) da linha através de um loop foreach. A segunda é
lendo a entrada caractere por caractere usando o comando bufferReader.read() e
processando cada caractere.
Para resolver o problema, usaremos a segunda opção.
Machine Translated by Google
• Mais uma variável onde iremos armazenar o operador atual da nossa expressão.
Em relação ao código acima, precisamos esclarecer o seguinte detalhe. O valor padrão do operador é +
para que o primeiro número encontrado seja igual ao nosso resultado.
Agora que temos nossas variáveis iniciais, precisamos pensar em qual será a estrutura básica do nosso
programa. Da condição entendemos que cada expressão termina com =, ou seja, teremos que ler e
processar símbolos até encontrar =. A seguir está a ortografia exata de um loop while .
O próximo passo é lidar com nossa variável de símbolo . Para ela, temos 3 casos possíveis:
• Se o caractere for o início de uma subexpressão entre parênteses, ou seja, o símbolo encontrado
é (.
• Se o caractere for um número entre 0 e 9. Mas como podemos verificar isso? Como podemos
verificar se nosso símbolo é um número? É aqui que entra o código ASCII do caractere, através
do qual podemos utilizar a seguinte fórmula: [código ASCII do nosso caractere] - [código ASCII
do caractere 0] = [dígito que representa o caractere]. Se o resultado desta verificação estiver
entre 0 e 9, então nosso símbolo é de fato um número.
Vamos dar uma olhada nas ações que precisamos tomar nos casos relevantes que definimos:
Machine Translated by Google
• Se o nosso símbolo for (, isso indica o início de uma subexpressão (uma expressão
entre parênteses). Por definição, a subexpressão deve ser avaliada antes de modificar
o resultado de toda a expressão (as ações entre parênteses são executadas primeiro).
Isso significa que teremos um resultado local para a subexpressão e o operador local.
Machine Translated by Google
Então, para avaliar o valor da subexpressão, usamos os mesmos métodos que usamos para avaliar a expressão
principal - usamos um loop while para ler os caracteres (até encontrarmos o caractere )). Dependendo se o
caractere lido é um dígito ou um operador, modificamos o resultado do subteste para . A implementação dessas
operações é análoga à implementação de avaliação da expressão descrita acima, portanto, acreditamos que o
leitor não deve ter problemas com isso. Após terminarmos de computar o resultado de nossa subexpressão,
modificamos o resultado de toda a expressão dependendo do valor de expressionOperator.
Formate a saída
A única saída que o programa deve imprimir no console é o resultado da resolução da expressão, com duas
casas decimais. Como podemos formatar a saída assim? Deixamos a resposta a esta questão
no leitor.
• Se tivermos um dígito do número palpite que corresponda a um dígito do número secreto e esteja na mesma
posição, temos um touro.
Machine Translated by Google
Touros = 1
Número estimado 8 8 1 1
Vacas = 2
Touros = 0
Número estimado 9 9 24
Vacas = 2
Se não houver nenhum número de palpite que corresponda aos critérios definidos no
console, "Não" deve ser impresso.
Conecte-se Saída
1222 2122 2212 2232 2242 2252 2262 2272 2281 2283 2284 2285 2286
2228
2287 2289 2292 2322 2422 2522 2622 2722 2821 2823 2824
2825 2826 2827 2829 2922 3222 4222 5222 6222 7222 8221 8223
21
8224 8225 8226 8227 8229 9222
Entrada Saída
1234 1134 1214 1224 1231 1232 1233 1235 1236 1237 1238 1239 1244 1254
1264 1274 1284 1294 1334 1434 1534 1634 1734 1834 1934 2 234 3234
30 4234 5234 6234 7234 8234 9234
Dados de entrada
Os dados de entrada são lidos no console. A entrada consiste em 3 linhas:
• A primeira linha contém o número secreto.
Os dados de entrada serão sempre válidos. Eles não precisam ser verificados.
Dados de saída
Machine Translated by Google
A saída deve ser impressa no console. A saída deve consistir em uma única linha - todos
os números adivinhados separados por um único espaço. Se não houver nenhum
número de palpite que corresponda aos critérios definidos no console, “Não” deve ser
impresso.
Limites
• O número secreto sempre consistirá em 4 dígitos no intervalo [1..9]. • O número de vacas e
segundos.
• Memória permitida: 16 MB.
Diretrizes e dicas
Resolveremos a tarefa em várias etapas:
• Vamos ler os dados de entrada. • Geraremos
Processamento de entrada
Para a entrada de nossa tarefa, temos 3 linhas:
• O número secreto. •
Se após a conclusão do nosso algoritmo, esse sinalizador ainda for falso, imprimiremos
Não no console conforme especificado na condição.
Machine Translated by Google
Vamos começar a pensar no nosso problema. O que precisamos fazer é analisar todos os
números de 1111 a 9999 , excluindo aqueles que contêm zeros (por exemplo, 9011, 3401 ,
etc. são inválidos). Qual é a maneira mais fácil de gerar todos esses números? Com loops
aninhados. Como temos um número de 4 dígitos, teremos 4 loops aninhados, cada um dos
quais gerará um dígito separado de nosso número de teste.
Graças a esses loops, temos acesso a cada dígito de todos os números que precisamos
verificar. Nosso próximo passo é dividir o número secreto em dígitos. Isso pode ser
alcançado muito facilmente por uma combinação de divisão inteira e modular.
Faltam-nos os dois últimos passos antes de começarmos a analisar quantas vacas e touros
existem em um determinado número. Assim, a primeira é a declaração de variáveis de
contador em nossos loops aninhados para contar as vacas e touros para o número atual.
O segundo passo é fazer cópias dos dígitos do número atual que analisaremos para evitar
problemas com o funcionamento do
inserir loops se fizermos alterações neles.
Agora estamos prontos para começar a analisar os números gerados. Que lógica podemos
usar? A maneira mais básica de verificar quantas vacas e touros existem em um número é
por meio de uma série de verificações if-else . Sim, não é o máximo
da maneira ideal, mas para não usar o conhecimento além do escopo deste livro,
escolheremos essa abordagem.
Que verificações precisamos?
Machine Translated by Google
O que é um "método"?
Até agora, descobrimos que, ao escrever código para um programa que resolve uma tarefa, fica mais fácil dividir a
tarefa em partes. Cada parte é responsável por uma determinada ação e, dessa forma, não apenas facilita a
resolução da tarefa, mas também melhora muito a legibilidade do código e o rastreamento de erros.
Qualquer pedaço de código que execute uma determinada funcionalidade e que tenhamos separado logicamente
pode invocar a funcionalidade do método. Métodos são exatamente isso - pedaços de código que são nomeados
por nós de uma determinada maneira e que podem ser chamados quantas vezes precisarmos. Um método pode
ser chamado quantas vezes julgarmos necessário para resolver um determinado problema. Isso
métodos simples
Os métodos simples são responsáveis por realizar uma ação que ajuda a resolver um determinado problema. Tais
ações podem ser imprimir uma determinada string no console, realizar algum tipo de verificação, executar um
ciclo etc
Este método é encarregado de imprimir um título que é uma string do caractere -. Por esta razão, seu nome é
printHeader. Parênteses ( e ) sempre seguem o nome, independentemente de como nomeamos o método.
Veremos como devemos nomear os métodos com os quais trabalhamos mais tarde, mas, por enquanto, apenas
observaremos que é importante que seu nome descreva a ação* que ele executa.
O corpo do método contém o código do programa que está entre as chaves { e }. Esses parênteses sempre seguem
sua declaração, e entre eles colocamos o código que resolve o problema descrito pelo nome do método.
Machine Translated by Google
Através de métodos evitamos a repetição do código do programa. Código duplicado é uma prática ruim
porque torna o programa muito difícil de manter e leva a erros. Se uma determinada parte do nosso código
estiver presente várias vezes no programa e precisarmos alterar algo, então as alterações devem ser
feitas a cada iteração do código em questão. A probabilidade de perder um local onde precisamos fazer
uma correção é muito alta, o que levaria a um comportamento incorreto do programa. Esta é a razão pela
qual é uma boa prática usar um trecho de código mais de uma vez em nosso programa para defini-lo como
um método separado.
Os métodos nos dão a capacidade de usar um trecho de código várias vezes. À medida que você resolver
mais e mais tarefas, descobrirá que usar métodos já existentes economiza muito tempo e esforço.
Declarando métodos
Na linguagem Java, declaramos métodos dentro de uma classe, ou seja. entre as chaves de abertura { e
fechamento } da classe, mas não na declaração de outro método. Declarar é registrar o método no
programa para que seja reconhecido pelo restante do programa. Nosso exemplo mais conhecido de
método é o método main(…), que usamos em cada programa que escrevemos.
• Tipo do valor de retorno. Nesse caso, o tipo é double, o que significa que o método de exemplo
retornará um resultado do tipo double. O valor de retorno pode ser int, double, String , etc. ou
void. Se o tipo for void, significa que o método não retorna um resultado, mas apenas executa uma
ação.
• Nome do método. O nome do método é definido por nós, lembrando que deve descrever a
função que é realizada pelo código em seu corpo. EM
Machine Translated by Google
exemplo, o nome é GetSquare, o que nos diz que a tarefa desse método é
calcular a face de um quadrado.
• Lista de parâmetros. É declarado entre colchetes ( e ), que escrevemos após seu nome. Aqui listamos a
série de parâmetros que o método irá utilizar. Pode haver apenas um parâmetro, vários ou uma lista vazia.
Se não houver parâmetros, escreveremos apenas os parênteses (). No exemplo específico, declaramos
o lado do parâmetro do tipo double.
• Uma declaração estática na descrição do método. Por enquanto, podemos assumir que static é escrito
sempre que um método é declarado, e mais tarde, quando aprendermos sobre programação orientada a
objetos (OOP), entenderemos a diferença entre métodos estáticos (compartilhados para toda a classe) e
métodos de objeto que operam sobre os dados de uma instância específica da classe (objeto).
Ao declarar métodos, é importante seguir a sequência de seus elementos principais - primeiro a palavra-chave
static, seguida do tipo do valor de retorno, depois o nome do método e, finalmente, uma lista de parâmetros
entre chaves (). Após declararmos o método, segue-se sua implementação (corpo). No corpo do método,
descrevemos
o algoritmo pelo qual ele resolve um determinado problema, ou seja, o corpo contém o código (bloco de programa)
que implementa a lógica do método. No exemplo mostrado, calculamos a face de um quadrado, ou seja, lado *
lado.
Quando declaramos uma variável no corpo de um método, a chamamos de variável local para o método. O
escopo no qual essa variável existe e pode ser usada começa na linha em que a declaramos e termina com a
chave de fechamento } do corpo do método. Essa área é chamada de escopo variável.
Métodos de chamada
Chamar um método é o início da execução do código contido no corpo do método. Isso é feito escrevendo seu
nome, seguido dos parênteses () e do sinal ; para fim de linha. Se nosso método requer dados de entrada, eles
são passados entre parênteses (), e a sequência dos parâmetros reais deve corresponder à sequência daqueles
passados ao declarar o método. Aqui está um exemplo:
Machine Translated by Google
Um método pode ser chamado de vários lugares em nosso programa. Uma maneira é chamá-lo do método
principal.
Um método também pode ser chamado do corpo de outro método que não seja o método principal
no nosso programa.
Existe uma opção para o método ser chamado de seu próprio corpo. Isso é chamado de recursão, e você
pode encontrar mais informações sobre isso na Wikipédia ou pesquisar você mesmo na Internet.
É importante saber que se um método for declarado em uma determinada classe, ele poderá ser chamado
antes da linha em que for declarado.
RECIBO EM DINHEIRO
Parte de cima -------------------------
Carregado para____________________
Parte do meio
Recebido por___________________
-------------------------
parte inferior
(c) SoftUni
Conecte-se Saída
RECIBO EM DINHEIRO
(não há) -------------------------
Machine Translated by Google
Conecte-se Saída
Carregado para____________________
Recebido por___________________
-------------------------
(c) SoftUni
Diretrizes e dicas
Nosso primeiro passo é criar um método void para imprimir o cabeçalho do recibo. Vamos dar um
nome significativo que descreva de forma breve e clara sua tarefa, por exemplo printReceiptHeader.
Em seu corpo, escreveremos o código do exemplo abaixo:
Da mesma forma, criaremos mais dois métodos para imprimir a parte do meio da nota (corpo)
printReceiptBody e para imprimir a parte inferior da nota (rodapé) printReceiptFooter. A seguir,
também criaremos mais um método que chamará
sua tarefa. São essas informações que constituem os parâmetros do método, e seu comportamento depende
delas.
Declaramos o método e sua lista de parâmetros e, em seguida, escrevemos o código que ele executará.
Ao declarar parâmetros, podemos usar diferentes tipos de variáveis, e devemos ter cuidado para que cada
parâmetro tenha um tipo e um nome. É importante observar que nas chamadas subsequentes ao método,
devemos passar valores para os parâmetros na ordem em que são declarados. Se tivermos parâmetros passados
na ordem int e depois String, ao chamá-lo não podemos passar um valor para String primeiro e depois para int.
Conecte-se Saída
2 O número 2 é positivo.
-5 O número -5 é negativo.
0 O número 0 é zero.
primeiro passo é criar um método e dar a ele um nome descritivo, por exemplo printSign. Este
método terá apenas um parâmetro do tipo int.
Nosso próximo passo é implementar a lógica pela qual nosso programa verificará exatamente qual é
o sinal do número. A partir dos exemplos, vemos que existem três casos: o número é maior que zero,
igual a zero ou menor que zero,
o que significa que faremos três verificações no corpo do método.
Nosso próximo passo é ler o número de entrada e chamar o novo método do corpo do método
principal .
solução: https://judge.softuni.bg/Contests/Practice/Index/665#1.
1 11
12 212
3 123 4 3123
12 412
1 31
21
Machine Translated by Google
Das tarefas de desenho em balanço, lembramos que é uma boa prática dividir a figura em
várias partes. Para nossa conveniência, vamos dividir o triângulo em
três partes - superior, linha média e inferior.
Por fim, imprimimos a parte inferior do triângulo, desta vez diminuindo o passo do loop.
Nosso próximo passo é criar um método que irá desenhar as linhas do meio no console.
Novamente, definimos um nome descritivo, por exemplo printMiddleRow.
Por fim, chamamos os métodos criados no método principal main() do programa, para
para desenhar o quadrado inteiro:
Até agora, vimos exemplos em que usamos a palavra-chave void ao declarar métodos , o que indica que
o método não retorna um resultado, mas executa uma determinada ação.
Se substituirmos void por um tipo de variável, isso dirá ao programa que o método deve retornar algum
valor do tipo especificado. Esse valor de retorno pode ser de qualquer tipo – int, String, double , etc.
É importante observar que o resultado retornado pelo método pode ser de um tipo compatível com o tipo
do valor de retorno do método. Por exemplo, se o tipo declarado do valor de retorno for double, podemos
retornar um resultado do tipo int.
declaração de retorno
Para obter o resultado do método, o operador return vem em socorro. Ele deve ser usado no corpo do
método e diz ao programa para parar sua execução e retornar ao chamador do método um valor
especificado, que é determinado pela instrução após a instrução de retorno em questão .
No exemplo abaixo, temos um método que pega um nome e um sobrenome, os concatena e os retorna
como resultado. O valor de retorno é do tipo String:
O operador return também pode ser usado em métodos void . Então o próprio método irá parar de
executar sem retornar nenhum valor, e não deve haver nenhuma expressão depois dele para ser
retornado. Neste caso, o uso de return é apenas para sair do método.
Há casos em que return pode ser chamado de vários lugares em um método, mas somente se houver
certas condições de entrada.
Machine Translated by Google
No exemplo abaixo, temos um método que compara dois números e retorna um resultado de -1, 0 ou 1,
respectivamente , baseado em se o primeiro argumento é menor, igual ou maior que o segundo argumento passado
para o função. O método usa a palavra-chave return em três locais diferentes para retornar três valores diferentes
a instrução return, no bloco atual, não deve haver outras linhas de código, porque o IntelliJ IDEA lançará um erro
que encontrou um código que não pode ser acessado:
Entrada Saída
3
6
4
Nosso próximo passo é chamar o novo método de nosso método main() e armazenar o
valor de retorno em uma variável apropriada.
2
256 81
8 34
Variantes de métodos
Em muitas linguagens de programação, o mesmo método pode ser declarado em diversas
variantes com o mesmo nome e parâmetros diferentes. Isso é conhecido como “sobrecarga
de método”. Agora vamos ver como escrever esses métodos sobrecarregados.
Assinatura do método
Neste exemplo, a assinatura do método é seu nome (print) e também seu parâmetro (String text).
Se em nosso programa existem métodos com os mesmos nomes, mas com assinaturas diferentes,
dizemos que temos variantes de método (sobrecarga de método).
Variantes de métodos
Conforme mencionado, se usarmos o mesmo nome para vários métodos com assinaturas diferentes,
isso significa que temos variantes de método. O código abaixo mostra como três métodos diferentes
podem ter o mesmo nome, mas têm assinaturas diferentes e executam ações diferentes.
Vamos considerar o seguinte exemplo - temos dois métodos com tipos de retorno diferentes. No entanto,
o IntelliJ IDEA nos mostra que há um erro porque as naturezas de assinatura de ambos são as mesmas.
Da mesma forma, ao tentar chamar um método chamado print(), o compilador não seria capaz de decidir
qual dos dois métodos executar.
Diretrizes e dicas
Para criar este método, primeiro precisamos criar três outros métodos com o mesmo nome e assinaturas
diferentes. Primeiro criamos um método que irá comparar alvos
números
Seguindo a lógica do método anterior, criamos um com o mesmo nome, que irá, no entanto, comparar símbolos.
O próximo método que precisamos criar irá comparar strings. Aqui a lógica será um pouco diferente, pois valores
do tipo String não permitem ser comparados usando os operadores < e >. Usaremos o método compareTo(…),
que retorna um valor numérico: maior que 0 (o objeto comparado é maior), menor que 0 (o objeto comparado é
menor) e 0 (para dois objetos idênticos).
A etapa final é ler os dados de entrada, usar as variáveis apropriadas e chamar o método getMax() do corpo do
método main().
Machine Translated by Google
Métodos de nomenclatura
Ao nomear um método, é recomendável usar nomes significativos. Como cada método é
responsável por alguma parte do nosso problema, ao nomeá-lo, devemos considerar sua
função, ou seja, bom
é prática comum que o nome descreva seu propósito.
O nome deve começar com letra minúscula e deve ser composto por um verbo ou um
par: verbo + substantivo. O nome é formatado de acordo com a convenção Camel
Minúsculas, ou seja, a primeira palavra começa com uma letra minúscula e cada palavra
subseqüente começa com uma letra maiúscula. Parênteses ( e ) sempre seguem seu
nome.
Cada método deve executar uma tarefa independente e o nome do método deve
descrever qual é sua função.
Alguns exemplos de nomes de métodos corretos:
• encontrarEstudante
• relatório de carga
• deles
Alguns exemplos de nomes de métodos incorretos:
• Método1
• FaçaAlgo
• Handle Stuff
Machine Translated by Google
• SampleMethod
• DirtyHack
Se não conseguirmos encontrar um nome adequado, provavelmente o método resolve mais
de uma tarefa ou não tem um propósito claramente definido e, então, precisamos pensar
em como dividi-lo em vários métodos separados.
Quando a linha do título do método for muito longa, recomenda-se dividi-la em várias linhas, com cada linha após
a primeira deslocada duas abas para a direita (para melhor legibilidade):
Outra boa prática ao escrever código é deixar uma linha em branco entre métodos, loops posteriores e condicionais.
Além disso, tente evitar escrever linhas longas e expressões complexas. Com o tempo, você descobrirá que isso
melhora a legibilidade do código e economiza tempo.
Recomendamos sempre usar chaves para o corpo de verificações e loops. Os parênteses não apenas melhoram a
legibilidade, mas também reduzem a possibilidade de cometer um erro e fazer com que nosso programa se
comporte mal.
• Aprendemos que o propósito dos métodos é dividir grandes programas por muitos
linhas de código em tarefas menores e mais curtas.
• Aprendemos sobre as melhores práticas ao trabalhar com métodos, como nomear métodos
e seus parâmetros, como formatar código e muito mais.
Machine Translated by Google
exercícios
Para consolidar o trabalho com métodos, resolveremos várias tarefas. Eles exigem que
você escreva um método com determinada funcionalidade e, em seguida, chame-o como
alimente-o com os dados lidos do console, conforme mostrado no exemplo
entrada e saída.
Conecte-se Saída
1 -100
2 1 -101 -102
3 -102
Escreva um método repeatString(str, count) que receba como parâmetros uma variável
do tipo String e um inteiro n e retorne a string repetida n vezes. Depois
isso para imprimir o resultado no console.
str prazos
strstr armazenamento armazenamento armazenamento
2 6
Diretrizes e dicas
Reescreva o método abaixo adicionando a concatenação da string de entrada ao resultado
tata no ciclo:
Diretrizes e dicas
Para executar o algoritmo, usaremos um loop while até que um número se torne 0. A cada iteração do
loop while , verificaremos se o índice atual do número não corresponde ao índice que estamos procurando.
Se corresponder, retornaremos o número do índice (número % 10) como resultado. Se não corresponder,
removeremos o último dígito do número (número = número / 10). Precisamos acompanhar qual dígito
estamos verificando pelo índice (da direita para a esquerda, começando em 1). Quando encontrarmos o
dígito, retornaremos o índice.
3 4 9
11 10 12
2 4 7
Diretrizes e dicas
Para resolver o problema, declararemos uma variável string na qual armazenaremos o resultado. Em
seguida, precisamos realizar os seguintes cálculos necessários para converter o número.
} retorna resultado;
}
Tarefa: notícias
Escreva um programa que leia um inteiro n e insira n mensagens nas seguintes linhas (várias
linhas são lidas para cada mensagem). Cada mensagem começa com messageType: sucesso,
aviso ou erro:
Conecte-se Saída
sucesso
Cadastro de usuário executado com sucesso.
registro de usuário ========================================
Usuário cadastrado Utilizador registado com sucesso.
com sucesso
Diretrizes e dicas
Definir e implementar os quatro métodos indicados.
Em readAndProcessMessage() , leia o tipo de mensagem do console e, de acordo com o tipo lido, leia o
restante dos dados (mais duas ou três linhas). Em seguida, chame o método apropriado para imprimir o tipo
de mensagem apropriado. Se você estiver lendo do console a partir de vários métodos separados,
observe que você só precisa criar um objeto Scanner uma vez (por exemplo, no método main) e passá-lo
para os outros métodos como um parâmetro. A criação de vários objetos Scanner que são lidos no console
pode não funcionar conforme o esperado.
solução: https://judge.softuni.bg/Contests/Practice/Index/665#12.
• Se o número for maior que 999, deve ser impresso "muito grande". • Se o
número for menor que -999, "muito pequeno" deve ser impresso.
• Se o número for negativo, "menos" deve ser impresso antes dele. • Se o número não
tiver três dígitos, não deve ser impresso.
Machine Translated by Google
trezentos e onze
4 quinhentos
quatrocentos e dezoito 3
311 123
quinhentos e nove 500
418 nove
123 9
509 -9945muito pequeno
Diretrizes e dicas
Podemos imprimir as centenas como texto primeiro - (o número / 100) % 10, depois as
dezenas - (o número / 10) % 10 e finalmente as unidades - (o número % 10).
O primeiro caso especial é quando o número é exatamente arredondado para 100 (por
exemplo, 100, 200, 300, etc.). Nesse caso, imprimimos "cem", "duzentos", "trezentos"
etc.
O segundo caso especial é quando o número formado pelos dois últimos dígitos do
número de entrada é menor que 10 (por exemplo, 101, 305, 609, etc.). Nesse caso,
imprimimos "cento e um", "trezentos e cinco", "seiscentos e nove", etc.
O terceiro caso especial é quando o número formado pelos dois últimos dígitos do
número de entrada é maior que 10 e menor que 20 (por exemplo, 111, 814, 919, etc.).
Neste caso, imprimimos "cento e onze", "oitocentos e quatorze", "novecentos e
dezenove", etc.
Exemplo:
• j ÿ p16i
o O código ASCII de je 106 ÿ Primeiro dígito - 1, último dígito - 6. o Colamos
o primeiro e o último dígito ÿ 16. o No início do valor da
string que representa o resultado, colamos o símbolo que é obtido da soma do código
ASCII + último dígito ÿ 106 + 6 ÿ 112 ÿ p.
Assumimos que os dados de entrada serão sempre válidos. O método principal deve ler os dados de entrada
fornecidos pelo usuário - um inteiro n, seguido por
de um símbolo em cada uma das próximas n linhas.
Para criptografar os caracteres e anexá-los à string criptografada. Por fim, como resultado, uma cadeia de
caracteres criptografada deve ser impressa como no exemplo a seguir.
Exemplo:
• S, o, f, t, U, n, i ÿ V83Kp11nh12ez16sZ85Mn10mn15h
4 7
s S
eu o
a f
x15rt18kh97Xr12o V83Kp11nh12ez16sZ85Mn10mn15h
p t
EM
n
eu
Machine Translated by Google
Diretrizes e Dicas A
variável String na qual o valor do resultado será armazenado será "" (String Vazia).
= Devemos fazer um loop n vezes, e a cada iteração atribuir um valor inicial String str
adicionaremos o símbolo criptografado à variável na qual armazenamos o valor do
resultado.
Para encontrar o primeiro e o último dígito do código ASCII, usaremos o ritmo de
algoritmo que usamos para resolver o problema "Number to Number System".
Formatação de código
A formatação adequada do nosso código o tornará mais legível e compreensível se outra
pessoa precisar trabalhar com ele. Isso é importante porque, na prática, precisaremos
trabalhar em equipe com outras pessoas, e é muito importante escrever nosso código de
maneira que nossos colegas possam navegar rapidamente. Existem certas regras para
a formatação adequada do código, que são chamadas de convenções. As convenções
são um conjunto de regras geralmente aceitas pelos programadores de uma determinada
linguagem e são amplamente utilizadas. Essas convenções ajudam a construir normas
em determinados idiomas - a melhor forma de escrever e quais são as boas práticas.
Supõe-se que, se um programador os seguir, seu código será fácil de ler e entender.
if (someCondition)
{ System.out.println("Dentro da instrução if");
}
Você pode ver que o comando System.out.println(…) no exemplo tem 4 espaços para
dentro (uma tabulação), que é o padrão Java. Não importa quantas guias em
Machine Translated by Google
inicia uma construção particular com chaves (ou seja, não importa quantos operadores
aninhados tenhamos), a chave de fechamento deve estar abaixo do início
da construção como no exemplo abaixo:
if (alguma condição) { if
(outra condição) {
System.out.println("Dentro da instrução if");
}
}
Aqui está um exemplo de código mal formatado contra as convenções geralmente aceitas para
escrever código na linguagem Java:
if(someCondition)
A primeira coisa a notar são as chaves {}. O primeiro parêntese (abertura) deve estar
após a condição if , e o segundo parêntese (fechamento) - sob o comando
System.out.println(…), em uma linha vazia separada. Além disso, o comando dentro
da construção if deve ter 4 espaços dentro (uma tabulação). Um espaço é deixado
imediatamente após a palavra-chave if e antes da condição de verificação e
imediatamente antes de { .
A mesma regra se aplica a loops for e quaisquer outras construções com chaves {}.
Aqui estão mais alguns exemplos:
Correto:
Errado:
for(int i=0;i<5;i++)
{ System.out.println(i); }
Para sua conveniência, existem atalhos de teclado no IntelliJ IDEA, que explicaremos
mais adiante neste capítulo, mas, por enquanto, estamos interessados em duas
combinações específicas. Uma combinação é para formatar o código em todo o
documento e a outra combinação é para formatar uma parte do código. Se quisermos
formatar todo o código, devemos pressionar [CTRL + ALT + L]. Caso queiramos
formatar apenas parte do código, então devemos destacar a parte que queremos
formatar e pressionar [Ctrl + Shift + Alt + L].
Machine Translated by Google
for(int i=0;i<5;i++)
{ System.out.println(i); }
Se pressionarmos [CTRL + ALT + L], que é nossa combinação para formatar o documento
inteiro, obteremos o código formatado de acordo com as convenções Java geralmente
aceitas, que ficará assim:
Exemplo: este curso começa com uma palestra chamada First steps in coding, então um
exemplo de nome de projeto para esta palestra pode ser FirstSteps InCoding. A mesma
convenção se aplica às classes em um projeto. Se tomarmos a primeira tarefa da palestra
Primeiros passos na codificação como exemplo, ela se chama Hello World e, portanto,
nosso arquivo de projeto será chamado HelloWorld.
Variáveis de nomeação
Na programação, as variáveis contêm alguns dados e, para tornar o código mais
compreensível, o nome de uma variável deve sugerir sua finalidade. Aqui estão mais
algumas recomendações para nomes de variáveis ao programar com a linguagem Java:
• O nome deve ser curto e descritivo e explicar para que serve a variável.
• O nome deve conter apenas as letras az, AZ, os números 0-9 e os símbolos '$' e '_'.
Machine Translated by Google
• Em Java, aceita-se que as variáveis sempre comecem com uma letra minúscula e contenham
letras minúsculas, com cada palavra subseqüente nelas começando com uma letra maiúscula
(essa nomenclatura também é conhecida como convenção camelCase ) .
• Deve-se tomar cuidado com letras maiúsculas e minúsculas, pois o Java diferencia maiúsculas de
minúsculas. Por exemplo , age e Age são variáveis diferentes.
• Os nomes de variáveis não podem corresponder a uma palavra-chave Java, por exemplo, int é
um nome de variável inválido.
• idade
• startIndex
• lastNegativeNumberIndex
Aqui estão alguns exemplos de variáveis mal nomeadas, mesmo que os nomes estejam corretos do
ponto de vista do compilador Java:
(em letras maiúsculas, que é o nome errado para uma variável, mas é
nome próprio para uma constante)
A princípio, todas essas regras podem nos parecer inúteis e desnecessárias, mas com o passar do
tempo e o acúmulo de experiência, você verá a necessidade de normas para escrever código de
qualidade para poder trabalhar com mais facilidade e rapidez em equipe. Você achará extremamente
tedioso trabalhar com código escrito sem
seguir quaisquer regras de qualidade de código.
As teclas de atalho são combinações que nos permitem realizar algumas ações de maneira mais fácil
e rápida, como qualquer ambiente de desenvolvimento de software
Machine Translated by Google
tem suas teclas de atalho, embora a maioria seja repetitiva. Agora veremos alguns dos atalhos
de teclado no IntelliJ IDEA.
Combinação Ação
Mais informações sobre atalhos de teclado no IntelliJ IDEA podem ser encontradas no site da
JetBrains: https://jetbrains.com/help/idea/keyboard-shortcuts-by-category.html.
• [Texto modelo] - aqui inserimos o código que será gerado ao escrever a abreviação. Neste
caso, este é o código abaixo:
Agora, quando digitamos scnl no IntelliJ IDEA, nosso novo trecho aparece:
O IntelliJ IDEA nos fornece um depurador integrado, por meio do qual podemos definir
pontos de interrupção em locais de nossa escolha. Quando uma parada (breakpoint) é
encontrada, o programa interrompe sua execução e permite a execução passo a passo das
linhas restantes. A depuração nos permite entrar nos detalhes de um programa e ver
exatamente onde ocorrem os erros, bem como
Qual é a razão para isto.
}
}
Após iniciar o programa, vemos que ele para sua execução na linha 8, onde colocamos
o stopper (breakpoint). O código da linha atual é destacado em uma cor adicional e
podemos executá-lo passo a passo. Para mover para a próxima linha, use a tecla
[F8]. Notamos que o código da linha atual ainda não foi executado. Executado quando
passamos para a próxima linha. Em verde é mostrado o valor atual da variável, na
figura abaixo i = 0.
Machine Translated by Google
Exemplo:
Neste exemplo, notamos que podemos passar mais do que apenas variáveis de texto. O
primeiro argumento é a string de formato. Segue uma série de argumentos, substituindo
onde houver uma porcentagem seguida por uma letra (%s ou %d). O primeiro %s significa
colocar em seu lugar o primeiro argumento passado após a string de formato, no caso
str1. Isso é seguido por %d, que significa substituir pelo primeiro inteiro passado nos
argumentos. O último caractere especial é novamente %s, o que significa substituí-lo
pela próxima sequência de caracteres str2. Isso é seguido por \n, que é um caractere
especial que indica uma nova quebra de linha. Podemos usar uma determinada variável
várias vezes.
Se o primeiro dígito após a vírgula for menor que 5, como no exemplo acima, o
arredondamento é para baixo, mas se for 5 ou maior, o arredondamento é para cima.
como no exemplo abaixo:
Neste caso, usamos a string de formato %.2f, que limitará a variável numérica a 2 dígitos
após a vírgula. Devemos ter em mente que o número antes da letra f significa quantas
casas decimais o resultado é arredondado (ou seja, pode ser %.3f ou %.5f). Recomenda-
se que com printf() usemos %n em vez de /n como caractere de nova linha .
if (condição) { //
corpo }
else (condição) { //
corpo
}
• Bloco de inicialização, executa apenas uma vez antes que a condição de repetição seja
verificada. Na maioria das vezes, a variável do contador (int i) é declarada e inicializada.
• Corpo de loop.
É importante saber que todas as três partes do loop for são opcionais e podem ser omitidas. for(; ; )
{ … } é um exemplo válido de loop for .
Conclusão
Se você leu o livro inteiro, resolveu todos os exercícios e chegou a essa conclusão, você está
de parabéns! Você já deu o primeiro passo para aprender a se tornar um programador, mas
ainda tem um longo caminho a percorrer antes de se tornar realmente bom em fazer da criação
de software sua profissão. Lembre-se dos quatro principais conjuntos de habilidades que todo
programador deve possuir para exercer
sua profissão:
Se você não conseguiu resolver todas ou a maioria das tarefas, volte e resolva-as! Lembre-se
que se tornar um programador requer muito trabalho e esforço. Essa profissão não é para
preguiçosos. Sem uma prática séria de programação por anos, não há como aprender!
Machine Translated by Google
Conclusão 415
ou ele está mentindo para você ou vai te dar um nível tão baixo que nem vão te contratar como
estagiário, mesmo que você esteja pagando a empresa que está perdendo seu tempo. Há
exceções, é claro, como se você não estiver começando do zero ou se tiver
pensamento de engenharia extremamente desenvolvido ou se você está se candidatando a um nível muito baixo
posição (por exemplo, suporte técnico), mas, em geral, um programador com menos de 1 ano
de aprendizado árduo e código de escrita não é possível!
Se os problemas do livro e os exemplos de exames preparatórios forem difíceis para você, você
precisará de mais preparação. Inscreva-se no curso gratuito "Fundamentos da programação" (https://
softuni.bg/apply) ou releia o livro com atenção desde o início, sem deixar de resolver as tarefas
de cada tópico de estudo! Você deve aprender a resolvê-los com facilidade, sem se ajudar com
as diretrizes e exemplos de soluções.
As formas de aprendizado na SoftUni são presenciais (melhor escolha) e online (caso não tenha outra opção).
Em ambas as formas, para ter sucesso no aprendizado do currículo (que é exigido pelas empresas de software
para começar), é necessário um aprendizado difícil. Você apenas tem que encontrar o tempo! O motivo número
1 para escorregar no caminho da profissão na SoftUni é não dedicar tempo suficiente para estudar: no mínimo
20-30 horas semanais.
• Para as pessoas que trabalham, isso significa deixar o emprego (e fazer um empréstimo ou
reduzir seus custos financeiros para sobreviver com uma renda menor por 1 a 2 anos até
que comecem a trabalhar em sua nova profissão).
• Para alunos de uma universidade tradicional, isso significa mudar seu foco fortemente para
programação e cursos práticos no SoftUni,
minimizando o tempo que eles gastam na universidade tradicional
versity.
• Para os desempregados, esta é uma excelente oportunidade de investir todo o seu tempo,
força e energia para adquirir uma profissão promissora, bem remunerada e muito
procurada, que lhes proporcione alta qualidade de vida e uma vida longa
termo prosperidade.
• Para alunos do ensino fundamental e médio, isso significa priorizar o que é mais importante
para o seu desenvolvimento: aprender programação prática no SoftUni que lhes dará uma
profissão e um emprego, ou dedicar toda a atenção ao sistema tradicional de ensino, ou
combinar habilmente ambos os esforços. Infelizmente muitas vezes as prioridades são
definidas pelos pais e para esses casos não temos solução.
A todos aqueles que não conseguem um excelente resultado no vestibular do SoftUni, recomendamos que se
dediquem a estudar melhor, entender e principalmente praticar o material de estudo deste livro. Se você não
conseguir lidar com as tarefas deste livro com facilidade, não será capaz de avançar no aprendizado de
programação e desenvolvimento de software. Não perca o básico da programação! Em hipótese alguma você
deve tomar decisões ousadas de deixar seu emprego ou universidade tradicional e fazer
grandes planos para sua futura profissão como engenheiro de software se não tiver uma nota excelente no
vestibular da SoftUni! É uma medida de quanto você gosta de programar, quanto gosta e quanto
Machine Translated by Google
Conclusão 417
você está realmente motivado a estudá-lo seriamente e depois trabalhar nele por anos,
todos os dias, com desejo e prazer.
Sem escrever muito e muito código e praticar muito, você não se torna um programador.
Dê a si mesmo tempo suficiente. Você não se torna um programador em um ou dois
meses. Na Internet, você encontra uma grande quantidade de recursos gratuitos como
livros, apostilas, videoaulas, cursos online e presenciais de programação e
desenvolvimento de software. No entanto, você precisará investir pelo menos um ou dois
anos para obter um nível básico de entrada.
Depois de progredir, encontre uma maneira de conseguir um estágio em uma empresa
(o que será quase impossível sem pelo menos um ano de codificação sólida antes) ou
crie seu próprio projeto prático para trabalhar por alguns meses , mesmo um ano, para
você aprender por tentativa e erro.
• softuni.bg – site oficial da SoftUni. Nele você encontra cursos, seminários, videoaulas e treinamentos
gratuitos (e não só) em programação, tecnologias de software e competências digitais.
• fb.com/SoftwareUniversity – página oficial da SoftUni no Facebook. Nele você conhecerá novos cursos,
seminários e eventos relacionados à programação e desenvolvimento de software.
• introprogramming.info – site oficial dos livros "Introduction to Programming" com C# e Java do Dr. Svetlin
Nakov e equipe. Os livros cobrem fundamentos de programação, estruturas básicas de dados e
algoritmos, OOP e outras habilidades básicas em profundidade e são uma excelente leitura de
acompanhamento após este livro. Porém, além da leitura, você também precisa de uma escrita sólida,
não se esqueça disso!
• stackoverflow.com - O Stack Overflow é um dos maiores fóruns de discussão do mundo para programadores,
onde você obterá ajuda sobre qualquer questão possível no mundo da programação. Se você fala inglês,
procure no StackOverflow e tire suas dúvidas por lá.
• meetup.com/find/tech/ – procure encontros tecnológicos perto de você e junte-se às comunidades que você
gosta. A maioria dos encontros de tecnologia é gratuita e os recém-chegados são bem-vindos.
• Se você estiver interessado em eventos de TI, conferências de tecnologia, treinamentos e estágios, confira
os maiores sites de eventos de TI como dev.bg e iteventz.bg.
objetivos para o desenvolvimento e oportunidades para fazer projetos significativos com inspiração e
paixão.
ISBN: 978-619-00-0636-7
Páginas: 420
Idioma: Búlgaro
Editora: Faber, Veliko Tarnovo
Sófia, 2017
Curso gratuito com videoaulas sobre "Fundamentos de programação com a linguagem C#"
Etiquetas: programação; programação de livros; livro de programação; um livro; livro grátis; grátis; livro eletrônico; livro
eletrônico; Java; Livro Java; livro Java; código do programa; livro Java; livro Java; Java; Livro básico de Java; Noções
básicas de programação Java; livro de programação Java; livro básico de programação; livro básico de programação Java;
programação de computadores; conceitos de programação; noções básicas de programação; livro didático;
autodidata; Introdução ao Java; Introdução Java; livro java; aulas de programação; aulas de programação; aprender
Java; tutoriais Java; tutoriais Java; aprender programação; como programar; programador; programação prática; técnicas
de programação; pensamento lógico; pensamento algorítmico; codificador; codificador; codificação; codificação; habilidades
de codificação; habilidades de programação; linguagem de programação; linguagem de programação; noções básicas de
programação; primeiros passos da programação; aulas; Código fonte; Código fonte; Código aberto; Código fonte; Código
aberto; compilador; compilador; depuração; depurador; Eclipse; IntelliJ IDEA; IDE; ambiente de desenvolvimento; Java;
JVM; JavaSE; dados; variáveis; operadores; expressões; console; console; entrada do console; saída do console;
Aplicação de console; Construções condicionais; se declaração; se construir; se; if-else; switch-caixa; ciclos; enquanto; fazer enquanto
ciclo; laços aninhados; métodos; métodos de chamada; parâmetros; tarefas de programação, resolução de problemas;
tarefas e decisões; escrever código; teste de código; exercícios; tarefas; decisões; instruções de programação; tarefas de
programação; exercícios de programação; bom programador; programador pessoal; Nakov; Nakov; Svetlin Nakov;
Svetlin Nakov; universidade de software; SoftUni; academia de software; ISBN 978-619-00-0636-7; ISBN9786190006367;
ISBN 9786190006367