Departamento de Ciência da
Computação - IME - USP
#include <stdio.h> int main() { int x,y, conta; printf("Digite o digito final do seu Numero USP: "); scanf("%d", &x); printf("Primeiro x= %d \n", x); y = 2*x + 1; conta = 1; printf("Primeiro y= %d \n", y); while (conta < 6 && (x <= 5 || y > 3)) { printf("conta= %d\n", conta); if (x%2 == 0) { x = x/2; y = y-5; printf("* x= %d\n", x); } else { x = 3*x + 1; y = y + 3; printf("x= %d\n", x); } printf("y= %d\n", y); conta = conta + 1; } printf("Ultimo x= %d\n", x); printf("Ultimo y= %d\n", y); return 0; }
A resposta depende do último dígito do seu número USP, ou seja, depende do
resto da divisão do seu número USP por 10.
Teste com o seu no. USP e compare a resposta.
(0) nusp%10 == 0. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 0 Primeiro x= 0 Primeiro y= 1 conta= 1 * x= 0 y= -4 conta= 2 * x= 0 y= -9 conta= 3 * x= 0 y= -14 conta= 4 * x= 0 y= -19 conta= 5 * x= 0 y= -24 Ultimo x= 0 Ultimo y= -24
(1) nusp%10 == 1. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 1 Primeiro x= 1 Primeiro y= 3 conta= 1 x= 4 y= 6 conta= 2 * x= 2 y= 1 conta= 3 * x= 1 y= -4 conta= 4 x= 4 y= -1 conta= 5 * x= 2 y= -6 Ultimo x= 2 Ultimo y= -6
(2) nusp%10 == 2. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 2 Primeiro x= 2 Primeiro y= 5 conta= 1 * x= 1 y= 0 conta= 2 x= 4 y= 3 conta= 3 * x= 2 y= -2 conta= 4 * x= 1 y= -7 conta= 5 x= 4 y= -4 Ultimo x= 4 Ultimo y= -4
(3) nusp%10 == 3. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 3 Primeiro x= 3 Primeiro y= 7 conta= 1 x= 10 y= 10 conta= 2 * x= 5 y= 5 conta= 3 x= 16 y= 8 conta= 4 * x= 8 y= 3 Ultimo x= 8 Ultimo y= 3
(4) nusp%10 == 4. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 4 Primeiro x= 4 Primeiro y= 9 conta= 1 * x= 2 y= 4 conta= 2 * x= 1 y= -1 conta= 3 x= 4 y= 2 conta= 4 * x= 2 y= -3 conta= 5 * x= 1 y= -8 Ultimo x= 1 Ultimo y= -8
(5) nusp%10 == 5. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 5 Primeiro x= 5 Primeiro y= 11 conta= 1 x= 16 y= 14 conta= 2 * x= 8 y= 9 conta= 3 * x= 4 y= 4 conta= 4 * x= 2 y= -1 conta= 5 * x= 1 y= -6 Ultimo x= 1 Ultimo y= -6
(6) nusp%10 == 6. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 6 Primeiro x= 6 Primeiro y= 13 conta= 1 * x= 3 y= 8 conta= 2 x= 10 y= 11 conta= 3 * x= 5 y= 6 conta= 4 x= 16 y= 9 conta= 5 * x= 8 y= 4 Ultimo x= 8 Ultimo y= 4
(7) nusp%10 == 7. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 7 Primeiro x= 7 Primeiro y= 15 conta= 1 x= 22 y= 18 conta= 2 * x= 11 y= 13 conta= 3 x= 34 y= 16 conta= 4 * x= 17 y= 11 conta= 5 x= 52 y= 14 Ultimo x= 52 Ultimo y= 14
(8) nusp%10 == 8. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 8 Primeiro x= 8 Primeiro y= 17 conta= 1 * x= 4 y= 12 conta= 2 * x= 2 y= 7 conta= 3 * x= 1 y= 2 conta= 4 x= 4 y= 5 conta= 5 * x= 2 y= 0 Ultimo x= 2 Ultimo y= 0
(9) nusp%10 == 9. Veja um exemplo abaixo.
Digite o digito final do seu Numero USP: 9 Primeiro x= 9 Primeiro y= 19 conta= 1 x= 28 y= 22 conta= 2 * x= 14 y= 17 conta= 3 * x= 7 y= 12 conta= 4 x= 22 y= 15 conta= 5 * x= 11 y= 10 Ultimo x= 11 Ultimo y= 10
Os seguintes trechos de programa têm como objetivo verificar se um dado n > 1 é primo. No final, a variável eprimo deve ter valor TRUE se n for primo e FALSE em caso contrário. Indique se o trecho está correto ou incorreto. Para cada trecho indicado como incorreto, dê um valor de n para o qual a resposta é incorreta.
(a) Correto ( ) Incorreto (X) eprimo = TRUE; Justificativa: divisor = 2; Quando n é primo, while (divisor <= n/2 || eprimo == TRUE) { o programa pára com divisor==n+1 if (n % divisor == 0) e eprimo==FALSE. Teste com n==2. eprimo = FALSE; divisor++; }
(b) Correto (X) Incorreto ( ) eprimo = TRUE; Hmmm. Êta código feio. . . divisor = 2; Alterna indicador dentro while (divisor <= n/2 && eprimo == TRUE) { do laço. . . if (n % divisor == 0) eprimo = FALSE; else eprimo = TRUE; divisor++; }
(c) Correto (X) Incorreto ( ) eprimo = TRUE; for (divisor = 2; divisor < n; divisor++) if (n % divisor == 0) eprimo = FALSE;
(d) Correto ( ) Incorreto (X) eprimo = FALSE; Justificativa: Bem errado. for (divisor = 2; divisor < n; divisor++) Resposta errada se n==2 ou if (n % divisor != 0) n é composto. eprimo = TRUE;
(e) Correto ( ) Incorreto (X) eprimo = TRUE; Justificativa: for (divisor = 1; divisor <= n/2 && eprimo == TRUE; divisor++) Diz que todo número n>=2 if (n % divisor == 0) não é primo. eprimo = FALSE; Note que divisor começa com 1. Assim, a resposta é errada sempre que n é primo
Um número é palíndromo se é igual quando lido de trás para frente ou de frente para trás. Por exemplo, 25952, 55 e 6 são palíndromos e 19192 e 3434 não são palíndromos.
Escreva um programa em C que leia uma sequência de números inteiros
positivos, terminada por zero, e verifica quantos são palíndromos.
Suponha que o dígito 0 não aparece em nenhum número da sequência.
Exemplos de três possíveis execuções do programa:
Digite um numero: 5 Digite um numero: 525 Digite um numero: 5225 Digite um numero: 526 Digite um numero: 59 Digite um numero: 0 3 numeros sao palindromos. |
Digite um numero: 5 Digite um numero: 151 Digite um numero: 212 Digite um numero: 0 3 numeros sao palindromos. |
Digite um numero: 15651 Digite um numero: 0 1 numeros sao palindromos. |
/* * Solucao 1: Verifica se cada numero da sequencia e' palindromo comparando * o primeiro e o ultimo digitos e "descascndo" o numero. */ #include <stdio.h> #define SIM 1 #define NAO 0 int main() { int numero; /* usado para ler os numeros da sequencia */ int primeiro, ultimo; /* primeiro e ultimo digitos de numero */ int pot10; /* maior potencia de 10 menor ou igual a numero */ int palindromo; /* indica se o numero e' palindromo */ int cont; /* contador de palindromos */ /* 1 leia o primeiro numero da sequencia */ printf("Digite um numero: "); scanf("%d", &numero); /* 2 inicialize o contador de palindromos */ cont = 0; /* 3 leia cada numero da sequencia e decida se eh palindromo */ while (numero != 0) { /* 3.1 determine a maior potencia de 10 menor ou igual a num */ pot10 = 1; while (pot10 <= numero) { pot10 = pot10*10; } pot10 = pot10/10; /* 3.2 decida se numero e' palindromo */ palindromo = SIM; while (numero > 10 && palindromo == SIM) { /* compare o primeiro e ultimo digito de numero */ ultimo = numero % 10; primeiro = numero / pot10; if (primeiro != ultimo) { palindromo = NAO; } /* arranque o primeiro e ultimo digito de numero */ numero = numero % pot10; numero = numero / 10; /* atualize pot10 */ pot10 = pot10 / 100; } /* 3.3 atualize o contador de palincromos */ if (palindromo == SIM) { cont = cont + 1; } /* 3.4 leia o proximo numero da sequencia */ printf("Digite um numero: "); scanf("%d", &numero); } /* 4 imprima o numero de palindromos */ printf("%d numeros da sequencia sao palindromos.\n\n", cont); return 0; } /* * Solucao 2: verifica se um numero e' palindromo comparando com o seu reverso * */ #include <stdio.h> #define SIM 1 #define NAO 0 int main() { int numero; /* usado para ler os numeros da sequencia */ int numreverso; /* armazena numero com seus digitos na ordem reversa */ int aux; /* variavel auxiliar usada para "reverter" numero */ int digito; /* usada para "pegar" cada digito de numero */ int cont; /* contador de palindromos */ /* 1 leia o primeiro numero da sequencia */ printf("Digite um numero: "); scanf("%d", &numero); /* 2 inicialize o contador de palindromos */ cont = 0; /* 3 leia cada numero da sequencia e decida se eh palindromo */ while (numero != 0) { /* 3.1 armazene o reverso de numero em numreverso */ numreverso = 0; aux = numero; while (aux > 0) { digito = aux%10; /* ultimo digito de aux */ numreverso = numreverso*10 + digito; aux = aux/10; /* remove o digito de aux */ } /* 3.2 verifique se numero e' palindromo */ if (numero == numreverso) { cont = cont + 1; } /* 3.3 leia o proximo numero da sequencia */ printf("Digite um numero: "); scanf("%d", &numero); } /* 4 imprima o numero de palindromos */ printf("%d numeros da sequencia sao palindromos.\n", cont); return 0; } /* * Solucao 3: colocaremos aqui qualquer solução que virmos e que * seja essencialmente diferente das anteriores. */
Dizemos que uma sequência de números inteiros é alternante se:
Escreva um programa em C que leia um número inteiro n ≥ 2 e uma seqüência de n números inteiros e imprima uma mensagem indicando se a seqüência é ou não alternante.
/* * Solucao 1: Solucao arroz-com-feijao. */ #include <stdio.h> #define SIM 1 #define NAO 0 int main() { int n; /* numero de elementos da sequencia */ int i; /* contador de numeros lidos da sequencia */ int ultimo; /* ultimo numero lido da sequencia */ int penultimo; /* penultimo numero lido sequencia */ int antepenultimo; /* antepenultimo numero lido sequencia */ int alternante; /* indica se a sequencia e' alternante */ /* 1 leia o numero de elementos da seqyencia */ printf("Digite o numero de elementos da sequencia: "); scanf("%d",&n); /* 2 leia o primeiro numero da sequencia */ printf("Digite o 1o. numero da sequencia: "); scanf("%d", &antepenultimo); /* 3 leia o segundo numero da sequencia */ printf("Digite o 2o. numero da sequencia: "); scanf("%d", &penultimo); /* 4 inicialize a variavel indicadora */ if (penultimo == antepenultimo) { alternante = NAO; } else { alternante = SIM; } /* 5 verifique se a sequencia e' alternante */ for (i = 2; i < n; i++) { /* 5.1 leia o proximo numero da sequencia */ printf("Digite o %do. numero da sequencia: ", i+1); scanf("%d", &ultimo); /* 5.2 verifique se a sequencia _nao_ e alternante */ if ( (antepenultimo <= penultimo && penultimo <= ultimo) || (antepenultimo >= penultimo && penultimo >= ultimo) ) { alternante = NAO; } /* 5.3 atualize s variaveis para a proxima iteracao */ antepenultimo = penultimo; penultimo = ultimo; } /* 6 escreva a resposta */ if (alternante == SIM) { printf("A sequencia e' alternante.\n\n"); } else { printf("A sequencia nao e' alternate.\n\n"); } return 0; } /* * Solucao 2: identica a solucao 1 * */ #include <stdio.h> #define SIM 1 #define NAO 0 int main() { int n; /* numero de elementos da sequencia */ int i; /* contador de numeros lidos da sequencia */ int ultimo; /* ultimo numero lido da sequencia */ int penultimo; /* penultimo numero lido sequencia */ int antepenultimo; /* antepenultimo numero lido sequencia */ int alternante; /* indica se a sequencia e' alternante */ /* 1 leia o numero de elementos da seqyencia */ printf("Digite o numero de elementos da sequencia: "); scanf("%d",&n); /* 2 leia o primeiro numero da sequencia */ printf("Digite o 1o. numero da sequencia: "); scanf("%d", &antepenultimo); /* 3 leia o segundo numero da sequencia */ printf("Digite o 2o. numero da sequencia: "); scanf("%d", &penultimo); /* 4 inicialize a variavel indicadora */ if (penultimo == antepenultimo) { alternante = NAO; } else { alternante = SIM; } /* 5 verifique se a sequencia e' alternante */ for (i = 2; i < n; i++) { /* 5.1 leia o proximo numero da sequencia */ printf("Digite o %do. numero da sequencia: ", i+1); scanf("%d", &ultimo); /* 5.2 verifique se a sequencia _nao_ e alternante */ if ((penultimo-antepenultimo)*(ultimo-penultimo) >= 0) { alternante = NAO; } /* 5.3 atualize s variaveis para a proxima iteracao */ antepenultimo = penultimo; penultimo = ultimo; } /* 6 escreva a resposta */ if (alternante == SIM) { printf("A sequencia e' alternante.\n\n"); } else { printf("A sequencia nao e' alternate.\n\n"); } return 0; } /* * Solucao 3: colocaremos aqui qualquer solução que virmos e que * seja essencialmente diferente das anteriores. */