Simule a execução do programa abaixo, destacando a sua saída. A saída do programa consiste de tudo que resulta dos comandos printf.
#includevoid soma(int v[4], int w[4]) { int i; w[0] = 0; for (i = 1; i < 4; i++) w[i] = v[i-1] + 1; } int mole(int m, int *n) { *n = m + *n; m = 11; return m; } int main() { int m, n, p, i; int v[4], w[4]; int nota; printf("Digite a unidade de seu NUSP: "); scanf("%d",&n); printf("Digite o seu NUSP: "); scanf("%d",&p); p = p%10; if (n != p){ printf("Tirei zero nesta questao!\n"); nota = 0; return nota; } else printf("Deu %d\n", n); printf("Vetor 1:"); for (i = 0; i < 4; i++){ v[i] = n + i; printf(" %d",v[i]); } printf("\n"); soma(v,w); printf("Vetor 2:"); for (i = 0; i < 4; i++) printf(" %d",w[i]); printf("\n"); soma(v,v); printf("Vetor 3:"); for (i = 0; i < 4; i++) printf(" %d",v[i]); printf("\n"); m = n*p; p = mole(m, &n); printf("Vetor 4: %d %d %d\n", m, n, p); return 0; }
SOLUÇÃO. A resposta depende, essencialmente, do unidade do número USP. Para NUSP 1234567 a unidade é 7. Teste com o seu no. USP e compare a resposta.
(0) unidade == 0 Digite a unidade de seu NUSP: 0 Digite o seu NUSP: 0 Deu 0 Vetor 1: 0 1 2 3 Vetor 2: 0 1 2 3 Vetor 3: 0 1 2 3 Vetor 4: 0 0 11 (1) unidade == 1 Digite a unidade de seu NUSP: 1 Digite o seu NUSP: 1 Deu 1 Vetor 1: 1 2 3 4 Vetor 2: 0 2 3 4 Vetor 3: 0 1 2 3 Vetor 4: 1 2 11 (2) unidade == 2 Digite a unidade de seu NUSP: 2 Digite o seu NUSP: 2 Deu 2 Vetor 1: 2 3 4 5 Vetor 2: 0 3 4 5 Vetor 3: 0 1 2 3 Vetor 4: 4 6 11 (3) unidade == 3 Digite a unidade de seu NUSP: 3 Digite o seu NUSP: 3 Deu 3 Vetor 1: 3 4 5 6 Vetor 2: 0 4 5 6 Vetor 3: 0 1 2 3 Vetor 4: 9 12 11 (4) unidade == 4 Digite a unidade de seu NUSP: 4 Digite o seu NUSP: 4 Deu 4 Vetor 1: 4 5 6 7 Vetor 2: 0 5 6 7 Vetor 3: 0 1 2 3 Vetor 4: 16 20 11 (5) unidade == 5 Digite a unidade de seu NUSP: 5 Digite o seu NUSP: 5 Deu 5 Vetor 1: 5 6 7 8 Vetor 2: 0 6 7 8 Vetor 3: 0 1 2 3 Vetor 4: 25 30 11 (6) unidade == 6 Digite a unidade de seu NUSP: 6 Digite o seu NUSP: 6 Deu 6 Vetor 1: 6 7 8 9 Vetor 2: 0 7 8 9 Vetor 3: 0 1 2 3 Vetor 4: 36 42 11 (7) unidade == 7 Digite a unidade de seu NUSP: 7 Digite o seu NUSP: 7 Deu 7 Vetor 1: 7 8 9 10 Vetor 2: 0 8 9 10 Vetor 3: 0 1 2 3 Vetor 4: 49 56 11 (8) unidade == 8 Digite a unidade de seu NUSP: 8 Digite o seu NUSP: 8 Deu 8 Vetor 1: 8 9 10 11 Vetor 2: 0 9 10 11 Vetor 3: 0 1 2 3 Vetor 4: 64 72 11 (9) unidade == 9 Digite a unidade de seu NUSP: 9 Digite o seu NUSP: 9 Deu 9 Vetor 1: 9 10 11 12 Vetor 2: 0 10 11 12 Vetor 3: 0 1 2 3 Vetor 4: 81 90 11
Faça um programa que lê
Entrada: 5 4 -7 24 5 8 8 4 6 4 -7 24 5 8 -7 Saída: SIM Entrada: 3 1 2 3 4 1 2 2 3 Saída: NAO Entrada: 1 7 4 10 -2 -2 7 Saída: SIM Entrada: 3 1 2 3 4 3 2 1 2 Saída: NAO
SOLUÇÃO.
/*
* VERSÃO 1: simples curta e grossa.
*
*/
#include <stdio.h>
#define MAX 1000
#define TRUE 1
#define FALSE 0
int main() {
int m; /* numero de elementos na 1a. sequencia */
int v[MAX]; /* numeros na primeira sequencia */
int n; /* numero de elementos na 2a. sequencia */
int w[MAX]; /* numeros na segunda sequencia */
int i; /* usada como indice dos vetores */
int j; /* usada como indice do vetor w */
int iguais; /* usada para verifica se v[0..m-1] == w[i..i+m-1] */
int e_sub; /* indica se a 1a. sequencia e' subsequencia da 2a. */
/* 1. leia o numero de elementos da 1a. sequencia */
printf("Entre com m: ");
scanf("%d", &m);
/* 2. leia a 1a. sequencia */
for (i = 0; i < m; i++)
{
printf("Entre com o %io. numero da 1a. sequencia: ", i+1);
scanf("%d", &v[i]);
}
/* 3. leia o numero de elementos da 2a. sequencia */
printf("Entre com n: ");
scanf("%d", &n);
/* 4. leia a 2a. sequencia */
for (i = 0; i < n; i++)
{
printf("Entre com o %io. numero da 2a. sequencia: ", i+1);
scanf("%d", &w[i]);
}
/* 5. procure uma ocorrencia de v[0..m-1] em w[0..n-1] */
e_sub = FALSE;
for (i = 0; i <= n-m; i++)
{
/* verifique se v[0..m-1] == w[i..i+m-1] */
iguais = TRUE;
for (j = 0; j < m; j++)
{
if (v[j] != w[i+j])
iguais = FALSE;
}
if (iguais == TRUE) e_sub = TRUE;
}
if (e_sub == TRUE)
{
printf("SIM. A 1a. sequencia e subsequencia da 2a.\n");
}
else
{
printf("NAO. A 1a. sequencia nao e subsequencia da 2a.\n");
}
return 0;
}
NA TELA:
Entre com m: 5
Entre com o 1o. numero da 1a. sequencia: 4
Entre com o 2o. numero da 1a. sequencia: -7
Entre com o 3o. numero da 1a. sequencia: 24
Entre com o 4o. numero da 1a. sequencia: 5
Entre com o 5o. numero da 1a. sequencia: 8
Entre com n: 8
Entre com o 1o. numero da 2a. sequencia: 1
Entre com o 2o. numero da 2a. sequencia: 6
Entre com o 3o. numero da 2a. sequencia: 4
Entre com o 4o. numero da 2a. sequencia: -7
Entre com o 5o. numero da 2a. sequencia: 24
Entre com o 6o. numero da 2a. sequencia: 5
Entre com o 7o. numero da 2a. sequencia: 8
Entre com o 8o. numero da 2a. sequencia: -7
SIM. A 1a. sequencia e subsequencia da 2a.
Entre com m: 3
Entre com o 1o. numero da 1a. sequencia: 1
Entre com o 2o. numero da 1a. sequencia: 2
Entre com o 3o. numero da 1a. sequencia: 3
Entre com n: 4
Entre com o 1o. numero da 2a. sequencia: 1
Entre com o 2o. numero da 2a. sequencia: 2
Entre com o 3o. numero da 2a. sequencia: 2
Entre com o 4o. numero da 2a. sequencia: 3
NAO. A 1a. sequencia nao e subsequencia da 2a.
Entre com m: 3
Entre com o 1o. numero da 1a. sequencia: 1
Entre com o 2o. numero da 1a. sequencia: 2
Entre com o 3o. numero da 1a. sequencia: 3
Entre com n: 3
Entre com o 1o. numero da 2a. sequencia: 1
Entre com o 2o. numero da 2a. sequencia: 2
Entre com o 3o. numero da 2a. sequencia: 3
SIM. A 1a. sequencia e subsequencia da 2a.
/*
* VERSÃO 2: Variante da versao 1. Indica as posicoes onde a 1a. sequencia
* ocorre na 2a. Deixa de comparar assim que detecta a ocorrencia.
*
*/
#include <stdio.h>
#define MAX 1000
#define TRUE 1
#define FALSE 0
int main() {
int m; /* numero de elementos na 1a. sequencia */
int v[MAX]; /* numeros na primeira sequencia */
int n; /* numero de elementos na 2a. sequencia */
int w[MAX]; /* numeros na segunda sequencia */
int i; /* usada como indice dos vetores */
int j; /* usada como indice do vetor w */
int iguais; /* usada para verifica se v[0..m-1] == w[i..i+m-1] */
int e_sub; /* indica se a 1a. sequencia e' subsequencia da 2a. */
/* 1. leia o numero de elementos da 1a. sequencia */
printf("Entre com m: ");
scanf("%d", &m);
/* 2. leia a 1a. sequencia */
for (i = 0; i < m; i++)
{
printf("Entre com o %io. numero da 1a. sequencia: ", i+1);
scanf("%d", &v[i]);
}
/* 3. leia o numero de elementos da 2a. sequencia */
printf("Entre com n: ");
scanf("%d", &n);
/* 4. leia a 2a. sequencia */
for (i = 0; i < n; i++)
{
printf("Entre com o %io. numero da 2a. sequencia: ", i+1);
scanf("%d", &w[i]);
}
/* 5. procure uma ocorrencia de v[0..m-1] em w[0..n-1] */
e_sub = FALSE;
for (i = 0; i <= n-m && e_sub == 0; i++)
{
/* verifique se v[0..m-1] == w[i..i+m-1] */
iguais = TRUE;
for (j = 0; j < m && iguais == TRUE; j++)
{
if (v[j] != w[i+j]) iguais = FALSE;
}
if (iguais == TRUE) e_sub = TRUE;
}
/* 6. imprima a resposta */
if (e_sub == TRUE)
{
printf("SIM. v[0..%d] == w[%d..%d].\n", m-1, i-1, i+m-2);
}
else
{
printf("NAO. A 1a. sequencia nao e subsequencia da 2a.\n");
}
return 0;
}
NA TELA:
Entre com m: 5
Entre com o 1o. numero da 1a. sequencia: 4
Entre com o 2o. numero da 1a. sequencia: -7
Entre com o 3o. numero da 1a. sequencia: 24
Entre com o 4o. numero da 1a. sequencia: 5
Entre com o 5o. numero da 1a. sequencia: 8
Entre com n: 8
Entre com o 1o. numero da 2a. sequencia: 4
Entre com o 2o. numero da 2a. sequencia: 6
Entre com o 3o. numero da 2a. sequencia: 4
Entre com o 4o. numero da 2a. sequencia: -7
Entre com o 5o. numero da 2a. sequencia: 24
Entre com o 6o. numero da 2a. sequencia: 5
Entre com o 7o. numero da 2a. sequencia: 8
Entre com o 8o. numero da 2a. sequencia: -7
SIM. v[0..4] == w[2..6].
Entre com m: 5
Entre com o 1o. numero da 1a. sequencia: 4
Entre com o 2o. numero da 1a. sequencia: -7
Entre com o 3o. numero da 1a. sequencia: 24
Entre com o 4o. numero da 1a. sequencia: 5
Entre com o 5o. numero da 1a. sequencia: 8
Entre com n: 8
Entre com o 1o. numero da 2a. sequencia: 4
Entre com o 2o. numero da 2a. sequencia: 6
Entre com o 3o. numero da 2a. sequencia: 4
Entre com o 4o. numero da 2a. sequencia: 4
Entre com o 5o. numero da 2a. sequencia: -7
Entre com o 6o. numero da 2a. sequencia: 24
Entre com o 7o. numero da 2a. sequencia: 5
Entre com o 8o. numero da 2a. sequencia: 8
SIM. v[0..4] == w[3..7].
/*
* VERSÃO 3: Variante da versao 1. Indica as posicoes onde a 1a. sequencia
* ocorre na 2a. Pára o programa assim que detecta a ocorrencia.
*
*/
#define MAX 1000
#define TRUE 1
#define FALSE 0
int main() {
int m; /* numero de elementos na 1a. sequencia */
int v[MAX]; /* numeros na primeira sequencia */
int n; /* numero de elementos na 2a. sequencia */
int w[MAX]; /* numeros na segunda sequencia */
int i; /* usada como indice dos vetores */
int j; /* usada como indice do vetor w */
int iguais; /* usada detectar se v ocorre em w */
/* 1. leia o numero de elementos da 1a. sequencia */
printf("Entre com m: ");
scanf("%d", &m);
/* 2. leia a 1a. sequencia */
for (i = 0; i < m; i++)
{
printf("Entre com o %io. numero da 1a. sequencia: ", i+1);
scanf("%d", &v[i]);
}
/* 3. leia o numero de elementos da 2a. sequencia */
printf("Entre com n: ");
scanf("%d", &n);
/* 4. leia a 2a. sequencia */
for (i = 0; i < n; i++)
{
printf("Entre com o %io. numero da 2a. sequencia: ", i+1);
scanf("%d", &w[i]);
}
/* 5. procure uma ocorrencia de v[0..m-1] em w[0..n-1] */
for (i = 0; i <= n-m; i++)
{
/* verifique se v[0..m-1] == w[i..i+m-1] */
iguais = TRUE;
for (j = 0; j < m && iguais == TRUE; j++)
{
if (v[j] != w[i+j]) iguais = FALSE;
}
if (iguais == TRUE)
{
printf("SIM. v[0..%d] == w[%d..%d].\n", m-1, i, i+m-1);
return 0;
}
}
/* neste ponto sabemos que v[0..m-1] nao ocorre em w[0..n-1] */
printf("NAO. A 1a. sequencia nao e subsequencia da 2a.\n");
return 0;
}
Esta questão consiste na implementação de duas funções e do main. Em todas elas, no lugar conveniente, você pode supor que já existam as seguintes linhas:
Seja A uma matriz de elementos inteiros diferentes 2-a-2. O sucessor do elemento A[i][j] é:#include <stdio.h> #define MAX 1024
13 5 17 0 9 -1 6 3 15 10 20 7
Dizemos que a matriz está ordenada se cada elemento dela é menor do que seu sucessor. Exemplo de matriz ordenada:
Exemplo de matrizes que não estão ordenadas:-1 0 3 5 6 7 9 10 13 15 17 20
-1 0 3 5 -1 0 5 3 -1 0 3 5 13 15 17 20 6 7 9 10 6 7 9 13 6 7 9 10 13 15 17 20 10 15 17 20
que recebe uma matriz A com m linhas e n colunas e devolve 1 se a matriz está ordenada e 0 caso contrário. Além disso, no caso da matriz não estar ordenada, a função devolve em *lin e *col os índices de um elemento A[*lin][*col] que seja maior que o seu sucessor.int verifica_ordem(int A[MAX][MAX], int m, int n, int *lin, int *col);
Exemplos: Para m==3, n==4, e matriz
a função devolve 1.-1 0 3 5 6 7 9 10 13 15 17 20
o valor de *lin determinado pela função deve ser 1, o valor de *col deve ser 3, e a função devolve 0.-1 0 3 5 13 15 17 20 6 7 9 10
os valores de *lin e *col podem ser 1 e 3, ou 1 e 1, tanto faz, e a função devolve 0.-1 0 3 5 13 17 15 20 6 7 9 10
SOLUÇÃO.
/*
* VERSÃO 1
*
*/
int verifica_ordem(int A[MAX][MAX], int m, int n, int *lin, int *col)
{
int ordenada; /* indica se a matriz esta ordenada */
int i; /* usado como indices de linhas */
int j; /* usado como indices de colunas */
ordenada = 1; /* esta ordenada ate que se prove o contrario */
for (i = 0; i < m; i++)
{
for (j = 0; j < n-1; j++)
{
if (A[i][j] > A[i][j+1])
{
*lin = i;
*col = j;
ordenada = 0;
}
}
if (i != m-1) /* A[m-1][n-1] nao possui sucessor */
{
if (A[i][n-1] > A[i+1][0])
{
*lin = i;
*col = j;
ordenada = 0;
}
}
}
return ordenada;
}s
/*
* VERSÃO 2
*
*/
int verifica_ordem(int A[MAX][MAX], int m, int n, int *lin, int *col)
{
int ordenada; /* indica se a matriz esta ordenada */
int i; /* usado como indices de linhas */
int j; /* usado como indices de colunas */
int isuc; /* indice da linha do sucessor de A[i][j] */
int jsuc; /* indice da coluna do sucessor de A[i][j] */
ordenada = 1; /* esta ordenada ate que se prove o contrario */
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (i != m-1 || j != n-1)
{
if (j < n-1)
{
isuc = i;
jsuc = j+1;
}
else
{
isuc = i+1;
jsuc = 0;
}
if (A[i][j] > A[isuc][jsuc])
{
*lin = i;
*col = j;
ordenada = 0;
}
}
}
}
return ordenada;
}
Escreva uma função de protótipo
que recebe uma matriz A com m linhas e n
colunas e troca o valor do elemento A[lin][col] com o valor
de seu sucessor. Você pode supor que o elemento
A[lin][col] tem sucessor.
void troca(int A[MAX][MAX], int m, int n, int lin, int col);
Exemplo: Para m==3, n==4, lin==0, col==3, e matriz
a matriz determinada pela função deve ser-1 0 3 5 13 17 15 20 6 7 9 10
-1 0 3 13 5 17 15 20 6 7 9 10
SOLUÇÃO.
/*
* Solucao simples, curta e grossa.
*
*/
void troca(int A[MAX][MAX], int m, int n, int lin, int col)
{
int aux; /* variavel auxiliar usada na troca */
aux = A[lin][col];
if (col != n-1)
{
A[lin][col] = A[lin][col+1];
A[lin][col+1] = aux;
}
else
{
A[lin][col] = A[lin+1][0];
A[lin+1][0] = aux;
}
}
Escreva um programa que lê dois inteiros m e n e uma matriz A de inteiros com m linhas e n colunas. Seu programa deve ordenar a matriz A e imprime a matriz ordenada. Você pode supor que 0 < m <= 50, 0 < n <= 50, e que os elementos da matriz A são 2-a-2 distintos.
Sugestão: Você pode usar as funções dos itens (a) e (b), mesmo que não as tenha feito, e ir trocando elementos da matriz até obter uma matriz ordenada.
Exemplo: Para m==3, n==4, e matriz
seu programa deve determinar e imprimir a matriz13 5 17 0 9 -1 6 3 15 10 20 7
-1 0 3 5 6 7 9 10 13 15 17 20
SOLUÇÃO.
int main()
{
int A[MAX][MAX];
int m; /* numero de linhas da matriz A */
int n; /* numero de colunas da matriz A */
int i; /* indice das linhas da matriz */
int j; /* indice das colunas da matriz */
/* 1. leia o numero de linhas da matriz */
printf("Entre com o numero de linhas: ");
scanf("%d", &m);
/* 2. leia o numero de colunas da matriz */
printf("Entre com o numero de colunas: ");
scanf("%d", &n);
/* 3. leia os elementos da matriz */
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("Entre com o elemento da posicao (%d,%d): ", i,j);
scanf("%d", &A[i][j]);
}
}
/* 4. ordene a matriz */
while (verifica_ordem(A, m, n, &i, &j) == 0)
{
troca(A, m, n, i, j);
}
/* 5. imprima a matriz ordenada */
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf(" %d",A[i][j]);
}
printf("\n");
}
return 0;
}