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; }