fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iomanip>
  6.  
  7. // ---- UI com flush para prompts ----
  8. namespace ui {
  9. inline void print(const std::string& msg){ std::cout << msg << std::flush; }
  10. inline void println(const std::string& msg){ std::cout << msg << '\n' << std::flush; }
  11. inline void pause(){ std::cout << "\nPressione ENTER para continuar..." << std::flush; std::string _; std::getline(std::cin, _); }
  12. }
  13.  
  14. // ---- Estruturas ----
  15. struct Player { int id; std::string nickname, team, role; int points, age; };
  16. struct Node { Player d; Node *l, *r; int h; Node(const Player& p): d(p), l(nullptr), r(nullptr), h(1) {} };
  17.  
  18. // ---- AVL: utilitários ----
  19. int height(Node* n){ return n ? n->h : 0; }
  20. int balance(Node* n){ return n ? height(n->l) - height(n->r) : 0; }
  21. void update(Node* n){ if(n) n->h = 1 + std::max(height(n->l), height(n->r)); }
  22. Node* rotateRight(Node* y){ Node* x=y->l; Node* t=x->r; x->r=y; y->l=t; update(y); update(x); return x; }
  23. Node* rotateLeft (Node* x){ Node* y=x->r; Node* t=y->l; y->l=x; x->r=t; update(x); update(y); return y; }
  24. Node* rebalance(Node* n){
  25. if(!n) return n; update(n); int b=balance(n);
  26. if(b> 1 && balance(n->l)>=0) return rotateRight(n); // LL
  27. if(b> 1 && balance(n->l)< 0){ n->l=rotateLeft(n->l); return rotateRight(n);} // LR
  28. if(b<-1 && balance(n->r)<=0) return rotateLeft(n); // RR
  29. if(b<-1 && balance(n->r)> 0){ n->r=rotateRight(n->r); return rotateLeft(n);} // RL
  30. return n;
  31. }
  32. Node* minNode(Node* n){ while(n && n->l) n=n->l; return n; }
  33.  
  34. Node* insertNode(Node* n,const Player& p,bool& ok){
  35. if(!n){ ok=true; return new Node(p); }
  36. if(p.id<n->d.id) n->l=insertNode(n->l,p,ok);
  37. else if(p.id>n->d.id) n->r=insertNode(n->r,p,ok);
  38. else ok=false;
  39. return rebalance(n);
  40. }
  41. Node* deleteNode(Node* n,int id,bool& ok){
  42. if(!n){ ok=false; return nullptr; }
  43. if(id<n->d.id) n->l=deleteNode(n->l,id,ok);
  44. else if(id>n->d.id) n->r=deleteNode(n->r,id,ok);
  45. else {
  46. ok=true;
  47. if(!n->l || !n->r){ Node* t=n->l?n->l:n->r; delete n; return t; }
  48. Node* t=minNode(n->r); n->d=t->d; n->r=deleteNode(n->r,t->d.id,ok);
  49. }
  50. return rebalance(n);
  51. }
  52.  
  53. // ---- Classe AVL ----
  54. class AVL {
  55. Node* root=nullptr;
  56.  
  57. void pre (Node* n) const { if(!n) return; showPlayer(n->d); pre(n->l); pre(n->r); }
  58. void in (Node* n) const { if(!n) return; in(n->l); showPlayer(n->d); in(n->r); }
  59. void post(Node* n) const { if(!n) return; post(n->l); post(n->r); showPlayer(n->d); }
  60.  
  61. Node* find(Node* n,int id) const {
  62. if(!n) return nullptr; if(id==n->d.id) return n;
  63. return id<n->d.id ? find(n->l,id) : find(n->r,id);
  64. }
  65. void collect(Node* n,std::vector<Player>& v) const {
  66. if(!n) return; collect(n->l,v); v.push_back(n->d); collect(n->r,v);
  67. }
  68. void clearRec(Node* n){ if(!n) return; clearRec(n->l); clearRec(n->r); delete n; }
  69.  
  70. static bool cmpPlayers(const Player& A,const Player& B){
  71. if(A.points!=B.points) return A.points>B.points; // desc por pontos
  72. return A.nickname<B.nickname; // desempate por nick
  73. }
  74.  
  75. public:
  76. ~AVL(){ clearRec(root); root=nullptr; }
  77.  
  78. bool insert(const Player& p){ bool ok=false; root=insertNode(root,p,ok); return ok; }
  79. bool remove(int id){ bool ok=false; root=deleteNode(root,id,ok); return ok; }
  80. const Player* searchId(int id) const { Node* n=find(root,id); return n?&n->d:nullptr; }
  81.  
  82. std::vector<Player> searchNick(const std::string& nick) const {
  83. std::vector<Player> all,res; collect(root,all);
  84. for(const auto& p:all) if(p.nickname==nick) res.push_back(p);
  85. return res;
  86. }
  87. std::vector<Player> searchTeam(const std::string& team) const {
  88. std::vector<Player> all,res; collect(root,all);
  89. for(const auto& p:all) if(p.team==team) res.push_back(p);
  90. return res;
  91. }
  92.  
  93. void preOrder() const { pre(root); }
  94. void inOrder() const { in(root); }
  95. void postOrder() const { post(root); }
  96.  
  97. // Funções adicionais
  98. size_t countTeam(const std::string& t) const { size_t c=0; std::vector<Player> a; collect(root,a); for(auto& p:a) if(p.team==t) ++c; return c; }
  99. size_t countMinPts(int m) const { size_t c=0; std::vector<Player> a; collect(root,a); for(auto& p:a) if(p.points>=m) ++c; return c; }
  100. bool existsNick(const std::string& n) const { std::vector<Player> a; collect(root,a); for(auto& p:a) if(p.nickname==n) return true; return false; }
  101. size_t totalPlayers() const { std::vector<Player> a; collect(root,a); return a.size(); }
  102. long long totalPoints() const { long long s=0; std::vector<Player> a; collect(root,a); for(const auto& p:a) s+=p.points; return s; }
  103. double avgPoints() const { auto n=totalPlayers(); return n?double(totalPoints())/double(n):0.0; }
  104. std::vector<Player> topN(size_t N) const {
  105. std::vector<Player> a; collect(root,a);
  106. std::sort(a.begin(),a.end(),cmpPlayers);
  107. if(N>a.size()) N=a.size();
  108. return std::vector<Player>(a.begin(),a.begin()+N);
  109. }
  110.  
  111. static void showPlayer(const Player& p){
  112. std::cout << "ID:" << p.id << " | Nick:" << p.nickname
  113. << " | Time:" << p.team << " | Funcao:" << p.role
  114. << " | Pontos:" << p.points << " | Idade:" << p.age << '\n';
  115. }
  116. }; // fecha a classe
  117.  
  118. // ---- Entrada guiada com prompts ----
  119. int readInt(const std::string& label){
  120. while(true){
  121. ui::println("\n" + label + " (digite apenas inteiros, ex.: 10)");
  122. ui::print("> ");
  123. std::string s; if(!std::getline(std::cin,s)) return 0;
  124. try{ size_t pos; int v=std::stoi(s,&pos); if(pos==s.size()) return v; } catch(...){}
  125. ui::println("Entrada invalida. Tente novamente.");
  126. }
  127. }
  128. std::string readStr(const std::string& label,const std::string& exemplo){
  129. while(true){
  130. ui::println("\n" + label + " (ex.: " + exemplo + ")");
  131. ui::print("> ");
  132. std::string s; std::getline(std::cin,s);
  133. if(!s.empty()) return s;
  134. ui::println("Campo nao pode ficar vazio. Tente novamente.");
  135. }
  136. }
  137.  
  138. // ---- Coleta de jogador ----
  139. Player readPlayer(){
  140. ui::println("\nCadastro de Jogador:");
  141. ui::println("Exemplos: ID=101, Nick=LeoX, Time=Falcons, Funcao=Entry, Pontos=85, Idade=20");
  142. Player p;
  143. p.id = readInt("Insira ID (inteiro unico)");
  144. p.nickname = readStr("Insira nome do jogador (nickname)","LeoX");
  145. p.team = readStr("Insira nome do time","Falcons");
  146. p.role = readStr("Insira funcao (Entry/Support/IGL/AWPer)","Entry");
  147. p.points = readInt("Insira pontuacao (inteiro >= 0)");
  148. while(p.points<0){ ui::println("Pontos nao podem ser negativos."); p.points=readInt("Insira pontuacao (>=0)"); }
  149. p.age = readInt("Insira idade (inteiro >= 10)");
  150. while(p.age<10){ ui::println("Idade minima recomendada: 10."); p.age=readInt("Insira idade (>=10)"); }
  151. return p;
  152. }
  153.  
  154. // ---- Dados de teste ----
  155. void seed(AVL& t){
  156. ui::println("\nCarregando dados de teste...");
  157. std::vector<Player> v={
  158. {10,"LeoX","Falcons","Entry",95,21},{4,"Tora","Falcons","Support",67,20},
  159. {15,"Galaxy","Comets","IGL",88,23},{2,"Naomi","Vikings","AWPer",71,22},
  160. {7,"Ragnar","Vikings","Entry",80,24},{20,"Zed","Titans","Support",60,19},
  161. {13,"Aether","Comets","Entry",92,22},{1,"Mika","Titans","IGL",77,21},
  162. {8,"Orion","Falcons","AWPer",85,23},{5,"Iris","Comets","Support",64,20}
  163. };
  164. size_t ok=0,dup=0; for(const auto& p:v){ if(t.insert(p)) ++ok; else ++dup; }
  165. std::cout << "Sucesso: " << ok << " insercoes. Duplicadas: " << dup << ".\n" << std::flush;
  166. }
  167.  
  168. // ---- Menu ----
  169. void menu(){
  170. ui::println("\n=== Campeonato de e-sports (AVL) ===");
  171. ui::println("1- Inserir jogador (ID, nick, time, funcao, pontos, idade)");
  172. ui::println("2- Remover por ID (informe ID inteiro do jogador)");
  173. ui::println("3- Buscar por ID (ex.: 15)");
  174. ui::println("4- Buscar por nickname (ex.: LeoX)");
  175. ui::println("5- Listar por time (ex.: Falcons)");
  176. ui::println("6- Pre-ordem (raiz-esq-dir)");
  177. ui::println("7- Em-ordem (ordenado por ID)");
  178. ui::println("8- Pos-ordem (esq-dir-raiz)");
  179. ui::println("9- Contar jogadores do time (ex.: Comets)");
  180. ui::println("10- Contar jogadores com pontos >= X (ex.: 80)");
  181. ui::println("11- Verificar se existe nickname (ex.: Mika)");
  182. ui::println("12- Total de jogadores");
  183. ui::println("13- Soma total de pontos");
  184. ui::println("14- Top N por pontos (ex.: N=5)");
  185. ui::println("15- Media de pontos");
  186. ui::println("16- Carregar dados de teste");
  187. ui::println("0- Sair");
  188. }
  189.  
  190. // ---- main ----
  191. int main(){
  192. std::ios::sync_with_stdio(false);
  193. std::cin.tie(&std::cout); // garante flush automático
  194.  
  195. AVL t;
  196. while(true){
  197. menu();
  198. int op = readInt("Escolha a opcao do menu");
  199. switch(op){
  200. case 1:{
  201. Player p = readPlayer();
  202. ui::println(t.insert(p) ? "Sucesso: Elemento inserido com sucesso." : "Erro: ID ja existente na arvore.");
  203. ui::pause();
  204. break;
  205. }
  206. case 2:{
  207. int id = readInt("Remocao: insira o ID (inteiro), ex.: 10");
  208. ui::println(t.remove(id) ? "Sucesso: Elemento removido com sucesso." : "Erro: Elemento nao encontrado na arvore.");
  209. ui::pause();
  210. break;
  211. }
  212. case 3:{
  213. int id = readInt("Busca por ID: insira o ID (inteiro), ex.: 15");
  214. if(const Player* q = t.searchId(id)) AVL::showPlayer(*q);
  215. else ui::println("Erro: Elemento nao encontrado na arvore.");
  216. ui::pause();
  217. break;
  218. }
  219. case 4:{
  220. std::string n = readStr("Busca por nickname: digite exatamente o apelido","LeoX");
  221. auto v = t.searchNick(n);
  222. if(v.empty()) ui::println("Erro: Elemento nao encontrado na arvore.");
  223. else for(const auto& p : v) AVL::showPlayer(p);
  224. ui::pause();
  225. break;
  226. }
  227. case 5:{
  228. std::string tm = readStr("Listar por time: informe o nome","Falcons");
  229. auto v = t.searchTeam(tm);
  230. if(v.empty()) ui::println("Nenhum jogador encontrado.");
  231. else for(const auto& p : v) AVL::showPlayer(p);
  232. ui::pause();
  233. break;
  234. }
  235. case 6: ui::println("\nPre-ordem (raiz-esq-dir):"); t.preOrder(); ui::pause(); break;
  236. case 7: ui::println("\nEm-ordem (ordenado por ID):"); t.inOrder(); ui::pause(); break;
  237. case 8: ui::println("\nPos-ordem (esq-dir-raiz):"); t.postOrder(); ui::pause(); break;
  238. case 9:{
  239. std::string tm = readStr("Contagem por time: informe o nome","Comets");
  240. std::cout << "Total de jogadores do time '" << tm << "': " << t.countTeam(tm) << '\n' << std::flush;
  241. ui::pause();
  242. break;
  243. }
  244. case 10:{
  245. int x = readInt("Contagem por pontos: insira X (inteiro), ex.: 80");
  246. std::cout << "Jogadores com pontos >= " << x << ": " << t.countMinPts(x) << '\n' << std::flush;
  247. ui::pause();
  248. break;
  249. }
  250. case 11:{
  251. std::string n = readStr("Verificar nickname: digite exatamente o apelido","Mika");
  252. ui::println(t.existsNick(n) ? "Existe jogador com esse nickname." : "Nao existe jogador com esse nickname.");
  253. ui::pause();
  254. break;
  255. }
  256. case 12: std::cout << "Total de jogadores: " << t.totalPlayers() << '\n' << std::flush; ui::pause(); break;
  257. case 13: std::cout << "Soma total de pontos: " << t.totalPoints() << '\n' << std::flush; ui::pause(); break;
  258. case 14:{
  259. int N = readInt("Top N: insira quantos jogadores deseja ver (inteiro), ex.: 5");
  260. size_t k = (N<=0 ? 0u : static_cast<size_t>(N));
  261. auto top = t.topN(k);
  262. if(top.empty()) ui::println("Arvore vazia ou N=0.");
  263. else { std::cout << "Top " << N << ":\n" << std::flush; for(const auto& p : top) AVL::showPlayer(p); }
  264. ui::pause();
  265. break;
  266. }
  267. case 15: std::cout << "Media de pontos: " << std::fixed << std::setprecision(2) << t.avgPoints() << '\n' << std::flush; ui::pause(); break;
  268. case 16: seed(t); ui::pause(); break;
  269. case 0: ui::println("Saindo..."); return 0;
  270. default: ui::println("Opcao invalida. Escolha um numero do menu."); ui::pause();
  271. }
  272. }
  273. return 0;
  274. }
  275.  
Success #stdin #stdout 0.01s 5320KB
stdin
/*  Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in 	*/
/*	einer Textdatei. 													*/
/*  Die Werte müssen auf einer separaten Zeile gespeichert sein			*/
/* 																		*/
/*	Erstellt: 17.5.2010													*/
/*  Autor: Thomas Scheffler												*/

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 32

unsigned Hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
    ++dist; 
    val &= val - 1;
  }
 
  return dist;
}



int main (void)
{
	char hex;
	int i;
	int a[ARRAY_SIZE];
	int b[ARRAY_SIZE];
	int hamDist = 0;
	FILE* fp;
	
	//Arrays mit 0 initialisieren
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
  		a[i] = 0;
  		b[i] = 0;
	}

	
	fp = fopen("hex.txt","r");
	if (fp == NULL) 
	{
		printf("Die Datei hex.txt wurde nicht gefunden!");
		exit(EXIT_FAILURE);
	}

	i=0;
	printf("1.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
        a[i]=strtol(&hex,0,16);
		i++;
    }
	i=0;
	printf("2.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
    	b[i]=strtol(&hex,0,16);
        i++;
    }
	fclose(fp);

	printf("Hamming-Abweichung pro Nibble:\n");
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
		printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
		hamDist += Hamdist(a[i],b[i]);
	}
	printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}

stdout
=== Campeonato de e-sports (AVL) ===
1- Inserir jogador  (ID, nick, time, funcao, pontos, idade)
2- Remover por ID   (informe ID inteiro do jogador)
3- Buscar por ID    (ex.: 15)
4- Buscar por nickname (ex.: LeoX)
5- Listar por time  (ex.: Falcons)
6- Pre-ordem        (raiz-esq-dir)
7- Em-ordem         (ordenado por ID)
8- Pos-ordem        (esq-dir-raiz)
9- Contar jogadores do time (ex.: Comets)
10- Contar jogadores com pontos >= X (ex.: 80)
11- Verificar se existe nickname (ex.: Mika)
12- Total de jogadores
13- Soma total de pontos
14- Top N por pontos (ex.: N=5)
15- Media de pontos
16- Carregar dados de teste
0- Sair

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Entrada invalida. Tente novamente.

Escolha a opcao do menu (digite apenas inteiros, ex.: 10)
> Saindo...