Ir ao conteúdo
  • Cadastre-se

C Cancelamento de Aula em C


Eduardo_Braz

Posts recomendados

Por Favor

 

O erro é o seguinte quando tem um número negativo ele está imprimindo exemplo de entrada e sua divada saída:

 

A condição do não e sim é a seguinte se o numero k nesse caso de teste é o 2.

 

O vetor tem que conter número maior que ZERO

 

Entrada:

4 2

0 -1 2 1

Saída:

NAO

2

1

 

Código

 

#include <stdio.h>

void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}

void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    //para cada elemento i do vetor
        for (i=0; i<n-1; i++) {
    menor=vet;
        indMenor=i;
        //procurar o i-esimo menor guardar o seu valor e de seu indice, respectivamente em menor e indMenor
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
         //O i-esimo menor esta na variavel menor trocar de posicao os elementos vet com vet[indMenor]
        troca(&vet, &vet[indMenor]);
    }
}

int main(){
    int n, k, i, j, cont, vetor[1000];

    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            printf("%d\n", vetor);
        }   
    }
    else{
        printf("SIM\n");
    }
}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Um professor X tem uma turma de N alunos. Frustrado com a falta de disciplina, ele decide cancelar a
aula se menos de K alunos estão presentes quando a aula começa. Dado o tempo de chegada de cada aluno,
determinar se a aula é cancelada. Caso a aula não seja cancelada, imprima uma lista com os alunos que
chegaram antes do início da aula em ordem contrária à mostrada na entrada.

 

Entrada

 

A primeira linha apresenta dois números inteiros separados por um espaço: N (alunos da turma) e K
(mínimo de presenças para que a aula não seja cancelada), com 0 ≤ N, K, ≤ 1000. Na segunda linha há
N inteiros separados por espaços (A1 , A2 ,... , An ) descrevendo os tempos de chegada para cada aluno.
Suponha que esta ordem seja a mesma da lista de presença do professor, com o primeiro aluno descrito na
entrada sendo o aluno 1 e assim por diante. Nota: horários de chegada não-positivos (Ai ≤ 0) indicam que
o aluno chegou cedo ou na hora; horários de chegada positivos (Ai>0) indicam o aluno chegou Ai minutos
tarde.

 

Saída

 

O programa apresenta uma mensagem com a palavra “SIM” se a aula é cancelada, e “NAO” caso
contrário. Após imprimir a mensagem quebre uma linha. Se a aula não for cancelada, imprima os M alunos
presentes antes do início da aula (ou seja, com Ai ≤ 0) na ordem contrária da lista de entrada.
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    for (i=0; i<n-1; i++) {
        menor=vet;
        indMenor=i;
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
        troca(&vet, &vet[indMenor]);
    }
}
    
int main(){
    int n, k, i, j, cont, vetor[1000];
    
    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor);
            }
        }   
    }
    else{
        printf("SIM");
    }
}

 

De 11 teste passou em apenas 4

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

15 horas atrás, Eduardo_Braz disse:

#include <stdio.h>
    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    for (i=0; i<n-1; i++) {
        menor=vet;
        indMenor=i;
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
        troca(&vet, &vet[indMenor]);
    }
}
    
int main(){
    int n, k, i, j, cont, vetor[1000];
    
    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor);
            }
        }   
    }
    else{
        printf("SIM");
    }
}

 

De 11 teste passou em apenas 4

:(

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Eu encontrei o erro só que eu não sei resolver é o seguinte ele tem que achar o índice dos números igual ou menor a ZERO só que não estou conseguindo pegar os mesmo...

adicionado 1 minuto depois
agora, Eduardo_Braz disse:

Eu encontrei o erro só que eu não sei resolver é o seguinte ele tem que achar o índice dos números igual ou menor a ZERO só que não estou conseguindo pegar os mesmo...

Em ordem decrescente..

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu meio que arrumei porém:

 

A saída que eu conseguir com a entrada sendo

10 4
-93 -86 49 -62 -90 -63 40 72 11 67:

NAO

1

3

4

5

10

 

e a saída que era para ser:

Saída

NAO
6

5

4

2

1

 

#include <stdio.h>

int main(){

    int n, k, i, j, cont, vetor[1000], aux, po;

    while (1){
        
        scanf("%d %d", &n, &k);
        
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            
            break;
            
        }
    }

    for(i = 0; i < n; i++){
        
        scanf("%d", &vetor);
        
    }

    for(i = 0; i < n; i++){
    
        if(vetor <= 0){
            cont++;
        }
    }

    if(cont >= k){
        printf("NAO\n");
        for(i=1; i<=n; i++){
            if (vetor <= 0){
                aux = vetor;
                po=i;                 
                printf("%d\n", po);
            }
        }
    }

    else{
        printf("SIM\n");
    }
}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Eduardo_Braz     seu código está bom , e para postar seu código é melhor usar o botão <> que está desenhado lá na barra de ferramentas da janela de postar 

478025385_barradeferramentas.JPG.0a2f72c92eade8e459ff098a361318f3.JPG

pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código  ,  e se colocar em ordem decrescente resolve então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <conio.h>    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j,aux,menor, indMenor     ;
    for (i=0; i<n-1; i++          ){
        for(j=i+1;j<n;j++         ){
            if( vet[j] > vet[i]   ){
                aux    = vet[i]    ;
                vet[i] = vet[j]    ;
                vet[j] = aux       ;
            }
        }
    }
}
int main(){
    int n, k, i, j, cont, vetor[1000];
    while(1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor[i]);
    }
    for(i = 0; i < n; i++){
        if(vetor[i] > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor[i]);
            }
        }   
    }
    else{
        printf("SIM");
    }
    getch();
}

 

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, devair1010 disse:

@Eduardo_Braz     seu código está bom , e para postar seu código é melhor usar o botão <> que está desenhado lá na barra de ferramentas da janela de postar 

478025385_barradeferramentas.JPG.0a2f72c92eade8e459ff098a361318f3.JPG

pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código  ,  e se colocar em ordem decrescente resolve então seu código com algumas modificações poderia ser assim  :


#include <stdio.h>
#include <conio.h>    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j,aux,menor, indMenor     ;
    for (i=0; i<n-1; i++          ){
        for(j=i+1;j<n;j++         ){
            if( vet[j] > vet[i]   ){
                aux    = vet[i]    ;
                vet[i] = vet[j]    ;
                vet[j] = aux       ;
            }
        }
    }
}
int main(){
    int n, k, i, j, cont, vetor[1000];
    while(1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor[i]);
    }
    for(i = 0; i < n; i++){
        if(vetor[i] > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor[i]);
            }
        }   
    }
    else{
        printf("SIM");
    }
    getch();
}

 

Muito obrigado pela a dica de postagem, vou estudar o seu código aqui muito obrigado mesmo

 

adicionado 3 minutos depois
2 minutos atrás, Eduardo_Braz disse:

if(cont >= k){ printf("NAO\n"); for(i = 0; i < n; i++){ insertionSort(n, vetor); if(vetor > 0){ printf("%d\n", vetor[i]); } } }

nessa parte tem como eu pegar o indice onde os números aparece?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

agora, devair1010 disse:

@Eduardo_Braz   o indice é o valor da variável   i    que controla o loop for .

Assim se eu colocar para imprimir o i então pode dá certo ?

 

adicionado 4 minutos depois
4 minutos atrás, devair1010 disse:

@Eduardo_Braz   o indice é o valor da variável   i    que controla o loop for .

Fiz o teste mais não funcionou. :(

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010Não conseguir pegar os índices.

adicionado 9 minutos depois
7 minutos atrás, Eduardo_Braz disse:

@devair1010Não conseguir pegar os índices.

ele só pega o 1 e 4 quando o teste:

Entrada:

4 2

0 -1 2 1

Saída:

1 2

e ordenar o índice em ordem decrescente

adicionado 10 minutos depois

image.png

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

if(cont >= k){
        printf("NAO\n");
        for(i = 1; i <= n; i++){
            if(vetor[i] <= 0){
                printf("%d\n", vetor[i]);
            }
        }
    }

 O erro está nessa parte o iniciado pede os índices das ocorrências quando a condição for verdadeira.

Quando eu troco o vetor somente por i ele imprime 1 e o 4 não entendo porque alguém poderia me ajudar nessa parte.

 

Entrada:

4 1

0 -1 2 1 (Índice 1  é o  0)

             (Índice 2  é o -1)

             (Índice 3  é o  2)

             (Índice 4  é o  1)

 

Quando eu faço a troca:

Saí assim:

 

1

4

 

O correto pelo o que eu coloquei acima séria:

 

1

2

 

Eu teria que colocar em ordem decrescente tudo o que eu já testei não funcionou, gostaria ver com vocês.

 

Por fim ficaria assim:

 

2

1

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!