Escreva a função arredonda
, que recebe como parâmetro um número real e devolve um número inteiro que corresponde ao seu arredondamento.
int arredonda(float num) {
num += 0.5;
return (int)num;
}
int main(){
float teste1 = 0.01, teste2 = 0.44, teste3 = 0.50, teste4 = 0.51, teste5 = 0.99, teste6 = 1.00;
printf("%f arredondado => %d\n", teste1, arredonda(teste1));
printf("%f arredondado => %d\n", teste2, arredonda(teste2));
printf("%f arredondado => %d\n", teste3, arredonda(teste3));
printf("%f arredondado => %d\n", teste4, arredonda(teste4));
printf("%f arredondado => %d\n", teste5, arredonda(teste5));
printf("%f arredondado => %d\n", teste6, arredonda(teste6));
}
Em estatística, a moda de um conjunto de valores é o valor que aparece mais frequentemente. Escreva um programa que lê do teclado um conjunto de números inteiros, onde cada número está no intervalo entre 0 e 10, e devolve a moda desse conjunto. Se múltiplas modas existirem, qualquer uma delas pode ser escolhida.
#### Solução 1 (só pode ser usada porque cada número do conjunto está num intervalo pequeno de valores)
#include <stdio.h>
#define MAX 100
int main(){
int freqs[11], i, n, num, moda;
/* o vetor frequencia tem 11 posicoes: 1 para cada
um dos valores entre 0 e 10.
Cada posicao guarda a frequencia do numero
correspondente. A principio, todos tem 0 como
frequencia. */
for (i = 0; i <= 11; i++)
freqs[i] = 0;
printf("Digite o numero de elementos do conjunto: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
/* Le um numero, incrementando sua frequencia */
printf("Digite o %d-esimo elemsento: ", i);
scanf("%d", &num);
freqs[num]++;
}
moda = 0;
/* Procura o numero com a maior frequencia */
for ( num = 1; num <= 11; num++) {
if (freqs[num] > freqs[moda])
moda = num;
}
printf("A moda dos valores e': %d", moda);
return 0;
}
#include <stdio.h>
#define MAX 100
void ordenacao_por_selecao(int n, int v[MAX]);
int main(){
int vet[MAX], i, n, moda, cont_moda, cont;
printf("Digite o numero de elementos do conjunto: ");
scanf("%d", &n);
/* Le os numeros do conjunto e armazena-os num vetor */
for (i = 1; i <= n; i++) {
printf("Digite o %d-esimo elemento: ", i);
scanf("%d", &vet[i-1]);
}
/* ordena o vetor; depois da ordenacao, os numeros
iguais aparecerao em sequencia */
ordenacao_por_selecao(n,vet);
cont_moda = 0;
moda = -1;
cont = 0;
for (i = 0; i < n; i++) {
cont++;
if (i == n-1 || vet[i] != vet[i+1]){
/* quando um bloco de numeros iguais termina */
if (cont > cont_moda) {
cont_moda = cont;
moda = vet[i];
}
cont = 0;
}
}
printf("A moda dos valores e': %d", moda);
return 0;
}
void ordenacao_por_selecao(int n, int v[MAX]){
int i, j, x, min;
for (i = 0; i < n; i++){
min = i;
for (j = i+1; j < n; j++)
if (v[j] < v[min])
min = j;
x = v[i];
v[i] = v[min];
v[min] = x;
}
}
void somabit (int b1, int b2, int *vaium, int *soma);
que recebe três bits (inteiros 0 ou 1) b1
, b2
e *vaium
e retorna um bit soma
representando a soma dos três e o novo um bit "vai-um" em *vaium
.
#include <stdio.h>
void somabit (int b1, int b2, int *vaium, int *soma) {
*soma = (b1 + b2 + *vaium) % 2;
*vaium = (b1 + b2 + *vaium) / 2;
}
int main() {
int m, n, qm, qn, vaium, dig, resp, pot;
printf("Digite m e n: ");
scanf("%d %d", &m, &n);
vaium = 0;
resp = 0;
pot = 1;
qm = m;
qn = n;
while (qm!=0 || qn!=0) {
somabit(qm%10, qn%10, &vaium, &dig);
qm = qm/10;
qn = qn/10;
resp = resp + pot*dig;
pot = pot * 10;
}
resp = resp + pot * vaium;
printf("%d + %d = %d \n", m, n, resp);
return 0;
}
Implemente a função
void substring(char s1[MAX], int p1, int p2, char s2[MAX])
,
que devolve em s2
a substring de s1
que começa na posição p1
e termina na posição p2
.
A sua função deve aplicar as seguintes regras:
p1
é negativo, então ele deve ser considerado como zero, indicando o primeiro caracter da string.p2
é maior que o comprimento da string menos 1, então deve ser considerado como comprimento da string menos 1, indicando o último caracter da string.p1
for maior que p2
, a string devolvida em s2
deve ser vazia. #include <stdio.h>
#define MAX 100
void substring(char s1[MAX], int p1, int p2, char s2[MAX]) {
int i,j;
if (p1 < 0)
p1 = 0;
i = j = 0;
while (i < p1) {
/* se o fim da string s1 aparece antes da posicao p1,
devolve em s2 uma string vazia */
if (s1[i] == '\0') {
s2[j] = '\0';
return;
}
i++;
}
/* copia a substring para s2 */
while (i <= p2 && s1[i] != '\0') {
s2[j] = s1[i];
i++;
j++;
}
s2[j] = '\0';
}
n
e m
Anxm
c
de uma colunak
e p
de duas linhase ordena entre as linhas k
e p
da matriz A
segundo a coluna c
.
Exemplo: n=6, m=3, c=1, k=0, p=4
n
datas em uma matriz datasnx3
, onde a primeira coluna corresponde ao dia, a segunda ao mês e a terceira ao ano, coloque essas datas em ordem cronológica crescente, usando a função acima.Obs.: Esse problema corresponde ao Exercício 11 da lista com Funções - Parte III.
#include <stdio.h>
#define MAX 50
void troca_linhas(int m, int linha1[MAX], int linha2[MAX]);
void ordena_submatriz(int n, int m, int A[MAX][MAX], int c, int k, int p);
int main(){
int n, i, j, datas[MAX][MAX];
printf("Digite o numero de datas a se ordenar: ");
scanf("%d", &n);
/* Le as n datas */
for ( i = 1; i <= n; i++){
printf("Digite o dia, mes e ano da %da. data: ", i);
scanf("%d%d%d", &datas[i-1][0], &datas[i-1][1], &datas[i-1][2]);
}
/* Primeiro ordena todas as datas pelo ano */
ordena_submatriz(n, 3, datas, 2, 0, n-1);
/* Para as datas num mesmo ano, ordena por mes */
i = 0;
for (j = 0; j < n; j++) {
if (j == n-1 || datas[j][2] != datas[j+1][2]) {
/* i e j e' sao a primeira e ultima linha de um bloco
de linhas com um mesmo valor para ano */
ordena_submatriz(n,3,datas,1,i,j);
i = j + 1;
}
}
/* Para as datas num mesmo mes e ano, ordena por dia */
i = 0;
for (j = 0; j < n; j++) {
if (j == n-1 || datas[j][1] != datas[j+1][1] || datas[j][2] != datas[j+1][2]) {
/* i e j e' sao a primeira e ultima linha de um bloco
de linhas com um mesmo valor para mes e ano */
ordena_submatriz(n,3,datas,0,i,j);
i = j + 1;
}
}
printf("\nAs datas ordenadas ficam: \n");
for (i = 0; i < n; i++)
printf("%d/%d/%d\n", datas[i][0],datas[i][1],datas[i][2]);
return 0;
}
/* Funcao que recebe um duas linhas com m elementos,
e troca o conteudo delas. */
void troca_linhas(int m, int linha1[MAX], int linha2[MAX]) {
int temp, i;
for (i = 0; i < m; i++){
temp = linha1[i];
linha1[i] = linha2[i];
linha2[i] = temp;
}
}
/* Funcao que ordena as linhas de k a p da matriz A de acordo
com os valores da coluna c */
void ordena_submatriz(int n, int m, int A[MAX][MAX], int c, int k, int p) {
int menor, i;
/* faz uma ordenacao por selecao */
for (; k <= p; k++){
menor = k;
for (i = k+1; i <= p; i++) {
if (A[i][c] < A[menor][c])
menor = i;
}
troca_linhas(m,A[k],A[menor]);
}
}