Mudanças entre as edições de "AULA 12 - Programação 1 - Graduação"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(23 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
;Exercícios parte 1
 
;Exercícios parte 1
 
#Ler um vetor de 10 números inteiros e colocar em ordem crescente.
 
#Ler um vetor de 10 números inteiros e colocar em ordem crescente.
#Ler um vetor de char e imprimir ao contrário.
+
#Ler um vetor de char e imprimir ao contrário os caracteres lidos. Exemplo: Marrocos >> socorraM
#Ler um vetor de char e trocar de minúsculas para maiúsculas.
+
#Ler um vetor de char e trocar de minúsculas para maiúsculas. Exemplo: douglas de souza >> DOUGLAS DE SOUZA.
 +
 
 +
{{collapse top|Solução 3}}
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
Linha 20: Linha 22:
 
   printf ("\nNova cadeia em maiúsculas: %s\n", alfa);
 
   printf ("\nNova cadeia em maiúsculas: %s\n", alfa);
 
}
 
}
</syntaxhighlight>
+
</syntaxhighlight>{{collapse bottom}}
 
:a) Modificar o programa para que ele faça também, palavras com iniciais maiúsculas. Exemplo: douglas de souza >> Douglas De Souza.
 
:a) Modificar o programa para que ele faça também, palavras com iniciais maiúsculas. Exemplo: douglas de souza >> Douglas De Souza.
:b) Modifique o programa para que ele reconheça: de, da, e dos nomes. Exemplo: maria da silva >> Maria da Silva.
+
:b) Modifique o programa para que ele reconheça as ligações como: '''de, da, dos, e,...''' do nome e desconsidere. Exemplo: maria '''da''' silva >> Maria da Silva.
 +
 
 +
{{collapse top|Solução 3.a.b (contribuição do aluno: Pablo Fidelis Dias)}}
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
void main ()
 +
{
 +
  char alfa[50];
 +
  int i=0;
 +
 +
  printf ("Entre com a cadeia em letras minúsculas: ");
 +
  gets(alfa);
 +
 +
  alfa [0]=alfa[i]-32;
 +
 
 +
  while(alfa[i]!=0){
 +
        if (alfa[i]==32){
 +
            if (!(alfa[i+1]=='d' && (alfa[i+3]==32 || alfa[i+4]==32)))
 +
                alfa[i+1]=alfa[i+1]-32;
 +
        }
 +
        i++;
 +
  }
 +
  printf ("\nNome: %s\n", alfa);
 +
}</syntaxhighlight>{{collapse bottom}}
 
<br>
 
<br>
 +
{{collapse top|Solução 2}}
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 +
int tam_string(char texto[])
 +
{
 +
  int i=0;
 +
  while(texto[i]!=0)
 +
i++;
 +
  return i;
 +
}
 +
 +
void main()
 +
{
 +
  char alfa[50],beta[50];
 +
  int tam,i;
 +
 +
  printf ("Entre com a cadeia : ");
 +
  gets(alfa);
 +
  tam=tam_string(alfa); // pega o tamanho da cadeia de caracteres
 +
  for(i=0;i<tam;i++) // percorre o vetor até o tamanho
 +
beta[i]=alfa[tam-i-1];  // como começa de 0 eu preciso fazer (tam-i-1), ou seja, o primeiro é o ultimo
 +
  beta[i]=0; // preciso definir o final do vetor porque não vai até o ultimo que '\0'
 +
  printf ("\nPrimeira cadeia: %s. Nova cadeia: %s\n", alfa, beta);
 +
}
 +
</syntaxhighlight>{{collapse bottom}}
 +
<br>
 +
 +
{{collapse top|Solução 1}}<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 +
void mostra_vet(int vet_aux[],int tam,int tipo) // tipo=0 vertical \n tipo=1 horizontal \t
 +
{
 +
  int i;
 +
 +
  if(tipo==0)
 +
printf("\n"); // vai deixar uma linha em branco só no tipo que quero.
 +
  for(i=0;i<tam;i++)
 +
    if(tipo==0)
 +
      printf("\n%d",vet_aux[i]);
 +
    else
 +
printf("\t%d",vet_aux[i]);
 +
  printf("\n");
 +
}
 +
 +
 +
void main()
 +
{
 +
  int i,j,num,vet_num[10];
 +
  printf("\nDigite os números:\n");
 +
  for(i=0;i<10;i++){
 +
      scanf("%d",&num);
 +
      vet_num[i]=num;
 +
  }
 +
  for(j=0;j<9;j++){ // varre os (10-1) vetores - o ultimo ele não tem que comparar
 +
          for(i=0;i<(9-j);i++){ // depois da primeira passagem o ultimo elemento já é o maior...
 +
              if(vet_num[i]>vet_num[i+1]){
 +
                num=vet_num[i];
 +
                vet_num[i]=vet_num[i+1];
 +
                vet_num[i+1]=num;
 +
              }
 +
      mostra_vet(vet_num,10,1); // mostra tipo=1 horizontal
 +
          }
 +
  }
 +
  mostra_vet(vet_num,10,0); // mostrta tipo=0 verrtical
 +
 
 +
}</syntaxhighlight>{{collapse bottom}}
 +
 +
 +
  
 
;Exercícios parte 2
 
;Exercícios parte 2
Linha 41: Linha 136:
  
 
:6. Implementar um sistema de controle de senha que permite abrir a porta para um usuário específico (userID) com uma senha específica.
 
:6. Implementar um sistema de controle de senha que permite abrir a porta para um usuário específico (userID) com uma senha específica.
 +
 +
{{collapse top|Solução 2.3}}
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <time.h>
 +
 +
int main(void)
 +
{
 +
    int i;
 +
    printf("intervalo da rand: [0,%d]\n", RAND_MAX); // para megasena é de 1 a 60
 +
 +
    for(i=0;i<6;i++)
 +
        printf("Numero %d: %d\n",i, rand());  // tem que ajustar para 59+1
 +
 +
}</syntaxhighlight>{{collapse bottom}}
  
  
Linha 47: Linha 158:
 
! style="background: #cdc5bf;" | [[AULA 11 - Programação 1 - Graduação | << ]]
 
! style="background: #cdc5bf;" | [[AULA 11 - Programação 1 - Graduação | << ]]
 
! style="background: #cdc5bf;" | Aula 12
 
! style="background: #cdc5bf;" | Aula 12
! style="background: #cdc5bf;" | <>
+
! style="background: #cdc5bf;" | [[AULA 13 - Programação 1 - Graduação | >> ]]
 
|}
 
|}

Edição atual tal como às 17h13min de 14 de abril de 2015

Exercícios parte 1
  1. Ler um vetor de 10 números inteiros e colocar em ordem crescente.
  2. Ler um vetor de char e imprimir ao contrário os caracteres lidos. Exemplo: Marrocos >> socorraM
  3. Ler um vetor de char e trocar de minúsculas para maiúsculas. Exemplo: douglas de souza >> DOUGLAS DE SOUZA.
Solução 3
#include <stdio.h>
void main ()
{
   char alfa[50];
   int i=0;
 
   printf ("Entre com a cadeia em letras minúsculas: ");
   gets(alfa);
 
   while(alfa[i]!=0){
        if (alfa[i]!=32)		// na tabela ASCII 32 é o espaço em branco ' '.
            alfa[i]=alfa[i]-32; 	// na tabela ASCII maiúscula estão separadas de minúscula por 32.
	i++;
   }
   printf ("\nNova cadeia em maiúsculas: %s\n", alfa);
}
|}
a) Modificar o programa para que ele faça também, palavras com iniciais maiúsculas. Exemplo: douglas de souza >> Douglas De Souza.
b) Modifique o programa para que ele reconheça as ligações como: de, da, dos, e,... do nome e desconsidere. Exemplo: maria da silva >> Maria da Silva.
Solução 3.a.b (contribuição do aluno: Pablo Fidelis Dias)
#include <stdio.h>
void main ()
{
   char alfa[50];
   int i=0;
 
   printf ("Entre com a cadeia em letras minúsculas: ");
   gets(alfa);
 
   alfa [0]=alfa[i]-32;

   while(alfa[i]!=0){
        if (alfa[i]==32){
            if (!(alfa[i+1]=='d' && (alfa[i+3]==32 || alfa[i+4]==32)))
                alfa[i+1]=alfa[i+1]-32; 
        }
        i++;
   }
   printf ("\nNome: %s\n", alfa);
}
|}


Solução 2
#include <stdio.h>

int tam_string(char texto[])
{
   int i=0;
   while(texto[i]!=0) 
	i++;
   return i;
}

void main()
{
   char alfa[50],beta[50];
   int tam,i;
 
   printf ("Entre com a cadeia : ");
   gets(alfa);
   tam=tam_string(alfa);	// pega o tamanho da cadeia de caracteres
   for(i=0;i<tam;i++)		// percorre o vetor até o tamanho
	beta[i]=alfa[tam-i-1];  // como começa de 0 eu preciso fazer (tam-i-1), ou seja, o primeiro é o ultimo
   beta[i]=0;			// preciso definir o final do vetor porque não vai até o ultimo que '\0'
   printf ("\nPrimeira cadeia: %s. Nova cadeia: %s\n", alfa, beta);
}
|}


Solução 1
#include <stdio.h>
 
void mostra_vet(int vet_aux[],int tam,int tipo) // tipo=0 vertical \n tipo=1 horizontal \t
{
  int i;
 
  if(tipo==0)
	printf("\n"); // vai deixar uma linha em branco só no tipo que quero.
  for(i=0;i<tam;i++)
    if(tipo==0)
      	printf("\n%d",vet_aux[i]);
    else
	printf("\t%d",vet_aux[i]);
  printf("\n");
}


void main()
{
  int i,j,num,vet_num[10];
  printf("\nDigite os números:\n");
  for(i=0;i<10;i++){
      scanf("%d",&num);
      vet_num[i]=num;
  }
  for(j=0;j<9;j++){		// varre os (10-1) vetores - o ultimo ele não tem que comparar
          for(i=0;i<(9-j);i++){ // depois da primeira passagem o ultimo elemento já é o maior...
              if(vet_num[i]>vet_num[i+1]){ 
                num=vet_num[i];
                vet_num[i]=vet_num[i+1];
                vet_num[i+1]=num;
              }
	      mostra_vet(vet_num,10,1); // mostra tipo=1 horizontal
          }
  }
  mostra_vet(vet_num,10,0); // mostrta tipo=0 verrtical
   
}
|}



Exercícios parte 2
1. O cálculo do juro composto é dado pela seguinte equação:



Onde PV é o valor presente, n o número de períodos de aplicação, i a taxa de juros e FV o valor futuro. Elabore um programa para computar o valor futuro para uma quantia aplicada de 10000 reais, dada uma taxa e o número de anos em que o valor é aplicado.

2. Refazer o exercício anterior armazenando o valor futuro de cada ano em uma posição de um vetor valores_futuros[]. Na posição 0 armazene o valor presente.
3. Gerar um vetor de 6 posições de inteiros e preenchê-lo com 6 números randômicos correspondentes a um jogo da megasena.
4. Fazer uma função adendo ao exercício anterior para ordenar o vetor gerado.
5. Adicionar uma interface para o exercício anterior para que um usuário possa entrar com 6 números de um jogo e o sistema conferir se o jogador ganhou ou não.
6. Implementar um sistema de controle de senha que permite abrir a porta para um usuário específico (userID) com uma senha específica.
Solução 2.3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    int i;
    printf("intervalo da rand: [0,%d]\n", RAND_MAX); // para megasena é de 1 a 60
 
    for(i=0;i<6;i++) 
        printf("Numero %d: %d\n",i, rand());  // tem que ajustar para 59+1
 
}
|}


<< Aula 12 >>