Você está aqui: C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico |
Valor da diária, valor médio arrecadado com e sem promoção e o lucro ou prejuízo mensal de uma promoção em um hotel - Desafio de Programação Resolvido em CQuantidade de visualizações: 399 vezes |
Pergunta/Tarefa: Escreva um programa C para resolver o seguinte problema: Um hotel com 42 apartamentos resolveu fazer promoções para os fins de semana fora da alta temporada, isto é, nos meses de abril, maio, junho, agosto, setembro, outubro e novembro. A taxa da promoção é de 22% da diária normal. A ocupação média do hotel sem promoção é de 40%. A expectativa é aumentar a taxa de ocupação para 70%. Supondo que as expectativas se confirmem, escrever um algoritmo que lê a diária normal, que calcule e escreva as seguintes informações: (a) O valor da diária no período da promoção. (b) O valor médio arrecadado sem a promoção, durante um mês. (c) O valor médio arrecadado com a promoção, durante um mês. (d) O lucro ou prejuízo mensal com a promoção. Seu código C deverá apresentar uma saída parecida com: Informe o valor da diária normal: 120 Diária no período de promoção: 26,40 Média arrecadada sem a promoção durante um mês: 8064,00 Média arrecadada com a promoção durante um mês: 3104,64 Prejuízo mensal com a promoção: 4959,36 Veja a resolução comentada deste exercício usando C: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // função principal do programa int main(int argc, char *argv[]){ // valor da diária em período normal float valor_diaria_normal; // valor da diária no período de promoção float valor_diaria_promocao; // outras variáveis auxiliares float media_arrecadado_sem_promocao, media_arrecadado_com_promocao; // vamos obter o valor da diária no período normal printf("Informe o valor da diária normal: "); scanf("%f", &valor_diaria_normal); // vamos obter o valor da diária no período promocional valor_diaria_promocao = valor_diaria_normal * (22.0 / 100.0); // vamos calcular o valor médio arrecadado sem a promoção, durante um mês // estamos assumindo 4 finais de semana por mês media_arrecadado_sem_promocao = (valor_diaria_normal * (42 * (40.0 / 100.0)) * 4); // vamos calcular o valor médio arrecadado com a promoção, durante um mês // estamos assumindo 4 finais de semana por mês media_arrecadado_com_promocao = (valor_diaria_promocao * (42 * (70.0 / 100.0)) * 4); printf("Diária no período de promoção: %f\n", valor_diaria_promocao); printf("Média arrecadada sem a promoção durante um mês: %f\n", media_arrecadado_sem_promocao); printf("Média arrecadada com a promoção durante um mês: %f\n", media_arrecadado_com_promocao); // houve lucro ou prejuízo? if (media_arrecadado_sem_promocao < media_arrecadado_com_promocao) { printf("Lucro mensal com a promoção: %f", (media_arrecadado_com_promocao - media_arrecadado_sem_promocao)); } else { printf("Prejuízo mensal com a promoção: %f", (media_arrecadado_sem_promocao - media_arrecadado_com_promocao)); } printf("\n\n"); system("PAUSE"); return 0; } |
![]() |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como usar a função isdigit() do header ctype.h da linguagem C para verificar se um caractere é um dígito de 0 a 9Quantidade de visualizações: 14530 vezes |
Em algumas situações podemos precisar verificar se um dado caractere é um dígito (número) de 0 a 9. Isso pode ser feito com o auxílio da função isdigit() no header ctype.h. Esta função recebe um caractere e retorna um valor diferente de 0 se o caractere testado for um dígito de 0 a 9. Caso contrário o retorno é 0. Veja um exemplo completo de seu uso:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main(int argc, char *argv[]){ char caractere; // vamos ler o caractere informado pelo usuário printf("Informe um caractere e tecle ENTER: "); scanf("%c", &caractere); // vamos verificar se o usuário informou um dígito // de 0 a 9 if(isdigit(caractere)) printf("Voce informou um digito de 0 a 9"); else printf("Voce NAO informou um digito de 0 a 9"); puts("\n\n"); system("PAUSE"); return 0; } |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de C - Declare uma matriz de 10 inteiros e use um laço for para preencher os elementos da matriz usando valores aleatórios de 0 até 10Quantidade de visualizações: 11727 vezes |
Pergunta/Tarefa: Escreva um programa C que declara uma matriz de 10 inteiros. Use um laço for para preencher os elementos da matriz usando valores aleatórios de 0 até 10 (incluindo os valores 0 e 10). Para finalizar, percorra os elementos da matriz e exiba seus valores. A saída do programa deverá ser parecida com: 3 5 5 1 3 8 10 0 9 7 Resposta/Solução: Veja abaixo a resolução completa para esta tarefa: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // vamos inicializar o gerador de números aleatórios srand(time(NULL)); // vamos declarar e construir uma matriz de 10 inteiros int valores[10]; // vamos preencher a matriz com valores aleatórios de 0 até 10 (incluindo) int i; for(i = 0; i < 10; i++){ valores[i] = rand() % 11; } // vamos exibir os valores dos elementos da matriz for(i = 0; i < 10; i++){ printf("%d ", valores[i]); } printf("\n\n"); system("PAUSE"); return 0; } Espero que você tenha gostado e continue a acessar a nossa Lista de Exercícios de C. |
C ::: Dicas & Truques ::: Struct (Estruturas, Registros) |
Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em CQuantidade de visualizações: 11402 vezes |
Esta dica mostra como declarar uma estrutura (struct), alocar duas instâncias desta e acessá-las usando ponteiros. Considere a seguinte struct: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; Note que agora a variável titulo foi declarada como uma matriz de caracteres de 80 posições. Mais adiante você entenderá o propósito de tal abordagem. Veja agora como alocamos memória para duas instâncias desta estrutura: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); A partir deste ponto as variáveis a e b são ponteiros para as duas instâncias recém alocadas. Observe que, quando usamos ponteiros para estruturas, seus membros são acessados usando-se a notação -> em vez do ponto. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- a->codigo = 342; a->paginas = 230; Para definir o valor para o membro titulo é preciso lançar mão da função strcpy(). Isso é feito porque estamos lidando com ponteiros, e cada instância de Livro possui sua área de memória a partir da qual a posição inicial da cadeia de caracteres que receberá o título do livro já foi inicializada. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- strcpy(a->titulo, "Programando em Java"); Observe agora o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char titulo[80]; int codigo; int paginas; }; int main(int argc, char *argv[]){ // cria dois ponteiros para duas instâncias (recém-alocadas) // de Livro Livro *a = (struct Livro*)malloc(sizeof(struct Livro)); Livro *b = (struct Livro*)malloc(sizeof(struct Livro)); // preenche os dados do primeiro Livro // Estamos usando ponteiros agora. Para definir o título // do livro é preciso usar a função strcpy, já que estamos // usando uma cadeia de caracteres strcpy(a->titulo, "Programando em Java"); a->codigo = 342; a->paginas = 230; // preenche os dados do segundo Livro strcpy(b->titulo, "JavaScript - O Guia Prático"); b->codigo = 675; b->paginas = 930; // exibe os dados do primeiro livro printf("Primeiro Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", a->titulo, a->codigo, a->paginas); // exibe os dados do segundo livro printf("\nSegundo Livro\nTitulo: %s\nCodigo: %d\nPaginas: %d\n", b->titulo, b->codigo, b->paginas); puts("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular raiz quadrada em C usando a função sqrt()Quantidade de visualizações: 6452 vezes |
A raiz quadrada de um número pode ser obtida em C por meio da função sqrt(). Esta função recebe um valor double, ou seja, qualquer tipo que possa ser convertido em double e retorna um valor double. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { int numero = 9; printf("A raiz quadrada de %d é %f", numero, sqrt(numero)); printf("\n\n"); system("pause"); return 0; } Ao executar este código nós teremos o seguinte resultado: A raiz quadrada de 9 é 3. É importante observar que não é possível obter a raiz quadrada de um número negativo. Caso seu código tente fazer isso, o resultado poderá ser imprevisível. |
C ::: Dicas & Truques ::: Data e Hora |
Como obter e exibir a data atual no formato DD/MM/YYYY (Ex: 02/07/2013) usando a linguagem CQuantidade de visualizações: 4712 vezes |
Em algumas situações gostaríamos de obter e exibir a data no formato DD/MM/YYYY, por exemplo, 23/05/2010. Para isso podemos usar a função strftime(), que nos permite formatar o conteúdo da estrutura tm usando especificadores de formato. Veja o código:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char *argv[]){ time_t data_hora_segundos; // guarda os segundos deste 01/01/1970 struct tm *timeinfo; // declara uma estrutura tm time(&data_hora_segundos); // preenche a variável data_hora_segundos // preenche a estrutura timeinfo timeinfo = localtime(&data_hora_segundos); // obtém e exibe a data atual no formato DD/MM/YYYY char data_atual[80]; strftime(data_atual, 80, "A data de hoje é: %d/%m/%Y", timeinfo); // mostra o resultado printf("%s\n\n", data_atual); system("PAUSE"); return 0; } Ao executar este código nós teremos o seguinte resultado: A data de hoje é: 02/08/2013 Para exibir a data no formato DD/MM/YYYY eu usei os especificadores de formato %d, %m e %Y. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como escrever uma função strtolower() para transformar uma palavra inteira em letras minúsculas usando a linguagem CQuantidade de visualizações: 9908 vezes |
O C padrão não possui uma função para transformar todas as letras de uma palavra em minúsculas, embora alguns compiladores a forneça. O que temos é a função: int tolower(int c); que permite transformar um caractere em seu correspondente minúsculo. Podemos tirar vantagem disso e escrever uma função strtolower() personalizada. Veja a listagem logo abaixo: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> void strtolower(char *string){ while(*string){ *string = tolower(*string); string++; } } int main(int argc, char *argv[]) { char frase[] = "PROGRAMANDO EM C"; strtolower(frase); printf("%s\n\n", frase); system("PAUSE"); return 0; } Ao executar este código nós teremos o seguinte resultado: programando em c Pressione qualquer tecla para continuar... |
C ::: Estruturas de Dados ::: Lista Ligada Simples |
Estrutura de Dados em C - Como inserir nós no final de uma lista singularmente ligada em CQuantidade de visualizações: 8045 vezes |
Esta dica mostra como inserir nós no final de uma lista singularmente ligada. A estrutura usada para representar cada nó é a seguinte:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- struct No{ int valor; struct No *proximo; }; Note que cada nó contém apenas um valor inteiro e um ponteiro para o próximo nó. Ao analisar o código você perceberá que tanto a inserção no final quanto a exibição dos nós são feitas usando funções. Isso permitirá o reaproveitamento deste código em suas próprias implementações. Vamos ao código: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó // função que permite exibir os valores de // todos os nós da lista void exibir(struct No *n){ if(n != NULL){ do{ printf("%d\n", n->valor); n = n->proximo; }while(n != NULL); } else printf("A lista esta vazia\n\n"); } // função que permite inserir nós no // final da lista. // veja que a função recebe o valor a ser // armazenado em cada nó e um ponteiro para o // início da lista. A função retorna um // ponteiro para o início da lista struct No *inserir_final(struct No *n, int v){ // reserva memória para o novo nó struct No *novo = (struct No*)malloc(sizeof(struct No)); novo->valor = v; // verifica se a lista está vazia if(n == NULL){ // é o primeiro nó...não deve apontar para // lugar nenhum novo->proximo = NULL; return novo; // vamos retornar o novo nó como sendo o início da lista } else{ // não está vazia....vamos inserir o nó no final // o primeiro passo é chegarmos ao final da lista struct No *temp = n; // vamos obter uma referência ao primeiro nó // vamos varrer a lista até chegarmos ao último nó while(temp->proximo != NULL){ temp = temp->proximo; } // na saída do laço temp aponta para o último nó da lista // novo será o último nó da lista...o campo próximo dele deve // apontar para NULL novo->proximo = NULL; // vamos fazer o último nó apontar para o nó recém-criado temp->proximo = novo; return n; // vamos retornar o início da lista intacto } } int main(int argc, char *argv[]) { // declara a lista struct No *inicio = NULL; // vamos inserir quatro valores no final // da lista inicio = inserir_final(inicio, 45); inicio = inserir_final(inicio, 3); inicio = inserir_final(inicio, 98); inicio = inserir_final(inicio, 47); // vamos exibir o resultado exibir(inicio); system("pause"); return 0; } |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como contar as ocorrências de uma substring em uma string em C usando uma função substring_count() personalizadaQuantidade de visualizações: 10258 vezes |
Em algumas situações precisamos obter a quantidade de vezes que uma substring ocorre dentro de uma string. Para isso podemos usar a função personalizada substring_count(). Esta função recebe a string e a substring que desejamos pesquisar e retorna um inteiro contendo a quantidade de vezes que a substring foi encontrada. Veja o código:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> // função personalizada que permite contar as // ocorrências de uma substring em uma string int substring_count(const char *str, const char *substring){ int i, j, k, quant = 0; // vamos percorrer todos os caracteres da string for(i = 0; str[i]; i++){ for(j = i, k = 0; str[j] == substring[k]; j++, k++){ if(substring[k + 1] == 0) // fim da comparação quant++; } } return quant; } int main(int argc, char *argv[]){ char frase[] = "Gosto muito de Java, JavaScript e Python"; printf("Ocorrencias encontradas: %d", substring_count(frase, "Java")); puts("\n\n"); system("PAUSE"); return 0; } |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
O aço no edifício A estrutura de estabilização da moldura estrutural da edificação da figura abaixo, que se caracteriza pelo fato de as extremidades das amarrações diagonais serem recuadas de uma certa distância uma da outra, onde se conectam às vigas, pode ser chamada de: ![]() A) Estrutura contraventada. B) Moldura amarrada excentricamente. C) Moldura resistente a momentos. D) Paredes de cisalhamento. E) Nenhuma das alternativas anteriores. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Serviços preliminares e instalações provisórias Em um canteiro de obras: A) São permitidas a entrada e a permanência de trabalhadores que não sejam compatíveis com a fase da obra. B) É permitida a entrada rápida de trabalhadores que não estejam assegurados. C) São proibidas a entrada e a permanência de quaisquer trabalhadores, independentemente da fase da obra. D) É proibida a entrada de trabalhadores que não estejam assegurados, mas é permitida a permanência de trabalhadores que não sejam compatíveis com a fase da obra. E) São proibidas a entrada e a permanência de trabalhadores que não estejam assegurados e que não sejam compatíveis com a fase da obra. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fundações |
Fundações diretas: tipos, características, métodos construtivos e cálculo das tensões no solo Um engenheiro verificou um problema de projeto na planta em uma edificação de grande porte: os pilares estavam muito próximos entre si. Desta forma, ele precisaria indicar ao mestre de obra um tipo de fundação mais apropriado, para não acarretar um problema estrutural devido à aproximidade dos pilares. A partir desta informação, assinale a alternativa correta: A) Radier. B) Sapata associada. C) Bloco. D) Sapata de divisa. E) Sapata corrida. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais |
Instalações prediais de combate a incêndio A água é um excelente agente extintor de incêndio e, por isso, é utilizada tanto em sistemas de proteção por chuveiros automáticos quanto em sistemas hidráulicos preventivos. O sistema hidráulico preventivo é dividido em três subsistemas que auxiliam o seu funcionamento. Sobre esses subsistemas, analise as afirmativas a seguir e assinale-as com V (verdadeiro) ou F (falso): ( ) O subsistema de reservação deve ter reservatório elevado, cuja água pode ser utilizada também para abastecimento da edificação. ( ) O subsistema de pressurização deve ser capaz de transportar água nas condições adequadas de vazão e pressão para extinguir o fogo. ( ) O subsistema de comando é responsável pelo acionamento do sistema de hidrantes, cujo operador deve acionar manualmente a bomba de incêndio. Assinale a alternativa que apresenta a sequência correta: A) F - F - F. B) V - V - F. C) F - V - F. D) F - V - V. E) V - V - V. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Qual a saída do seguinte programa Python?valor = 0.0043563 print("Valor: %e" % valor) A) Erro de execução na linha 2 B) Valor: 0.004356 C) Valor: 4.356300e-03 D) Valor: 0 E) Valor: 0.0044 Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |