Ir ao conteúdo
  • Cadastre-se

C Não consigo resolver exercício em linguagem C


AVSS

Posts recomendados

Alguém Poderia me ajudar a resolver esse exercício em C.

Solicitar ao usuário os seguintes dados de até 20 alunos

Matrícula Int, positivo, 0= fim

Ano.matrícula Int, >= 2010

Exibir a menor matrícula e quantidade de alunos matriculados após ano 2010

Link para o comentário
Compartilhar em outros sites

18 horas atrás, AVSS disse:

@Midori poderia fazer onque comentou aqui, para eu entender?

Se já teve algum contato com programação deve conseguir fazer algo que comentei. Tente fazer e se ainda tiver dificuldade volte com o código para receber ajuda do fórum. Mas se não consegue fazer nada, acho melhor ler algum material antes para conhecer melhor os comandos e a linguagem.

Link para o comentário
Compartilhar em outros sites

@Kyul@Midori

 

Fiz assim, mas deu vários erros.

 

#include <stdio.h>

//Dados de ate 20 alunos, matricula int; positivo; ano matricula int >=2010
// exibir a menor matricula e a quantidade de alunos matriculados apos 2010
int main ()
{
    int i,mem,ma[20], ano_matr; // menor matr; ano matri; matr (vetor)
    cout>>"\nNESTE PROGRAMA DESCOBRE E EXIBE A MENOR MATRICULA E A QUANTIDADE DE MATRICULAS APOS O ANO 2010" ;
    cout<<"\nDENTRE ATE 20 MATRICULAS DE ALUNOS: ";
    for(i=0;i<20;i++)
{   cout<<"\nINFORME A MATRICULA (0=FIM DOS DADOS): ";
    cin >>ma[i];
    if (ma[i]==0) break;
    while (ma[i]<0);
{   cout<<"\nMatricula Invalida. Informe Novamente: ";
    cin >>ma[i];
    cout<<"\nINFORME O ANO DE MATRICULA: ";
    for(i=o;i>=2010;i++)
    cout<<"\nINFORME ANO DE MATRICULA (0=FIM DOS DADOS): ";
    cin >>ano.matr[i];
    if (ano.matr[i]==0);
}

    if(i==) {mem=ma[i];ano.matr=[i]}
    else if (ma[i]<mem)mem=ma[i];
    else if (ma[i]==ano.matr)ano.matr=ma[i];    
    }
    if (i==0) cout<<"\nNAO HA DADOS";
    else
    {cout<<"\nMENOR MATRICULA= " <<mem;
    cout<<"\nQUANTIDADE TOTAL DE MATRICULAS APOS 2010= ";
    cout<<"\n\n\n";
    
    }
    system("pause");
    return 0;
} // fim dos dados

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

@AVSS    olá ,   seu código tem muitos erros de syntaxe , que é a escrita errada dos comandos ,  estude melhor como usar cada um dos comando e também observe no retorno do compilador os erros que ele apresenta e veja como resolve-los ,  e seu código corrigido funciona , mas a lógica do mesmo não está boa ,  falta informações para que ele funcione , pois é você que tem que dizer ao compilador todas as ações que ele deve tomar de acordo com cada situação , dependendo do que o comando if decidir ,  e também você postou no tópico de linguagem  c  , mas está usando comandos da linguagem c++ , que não é a mesma coisa , e até funciona  , mas precisa salvar o código com a extensão .cpp  , e colocar também o 

 

#include <iostream>

no inicio do código

#define _CRT_SECURE_NO_WARNINGS  // para usar scanf e outras funções no visual studio
#include <iostream>  
#include <stdio.h>
#include <stdlib.h>
//Dados de ate 20 alunos, matricula int; positivo; ano matricula int >=2010
// exibir a menor matricula e a quantidade de alunos matriculados apos 2010
int main()
{
    int i, mem{}, ma[20], ano_matr[20]; // menor matr; ano matri; matr (vetor)
    printf("NESTE PROGRAMA DESCOBRE E EXIBE A MENOR MATRICULA E A QUANTIDADE DE MATRICULAS APOS O ANO 2010\n");
    printf("DENTRE ATE 20 MATRICULAS DE ALUNOS:\n");
    for (i = 0; i < 20; i++)
    {
        printf("INFORME A MATRICULA (0=FIM DOS DADOS): ");
        scanf("%d",&ma[i]);
        if (ma[i] == 0) break;
        while (ma[i] < 0)
        {
            printf("Matricula Invalida. Informe Novamente: ");
            scanf("%d", &ma[i]);
        }
        printf("INFORME O ANO DE MATRICULA: ");
        for (i = 0; i >= 2010; i++)   // tinha colocado a letra o minusculo e é zero
            printf("INFORME ANO DE MATRICULA (0=FIM DOS DADOS): ");
        scanf("%d",&ano_matr[i]);
        if (ano_matr[i] == 0); // essa linha aqui não serve para nada
    }
    if (i == 0) 
    { 
        mem = ma[i]; 
        ano_matr[i] = i;
    }
    else 
        if (ma[i] < mem)
            mem = ma[i];
        else 
            if (ma[i] == ano_matr[i])
                ano_matr[i] = ma[i];
    if (i == 0)
        printf("NAO HA DADOS\n");
    else
    {
        printf("MENOR MATRICULA= ",mem);
        printf("QUANTIDADE TOTAL DE MATRICULAS APOS 2010= ");
        printf("\n\n\n");

    }
    system("pause");
    return 0;
} // fim dos dados

 

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

@AVSS Está tentando usar o comando cout de iostream do C++. Seu programa deve ser feito em C com as funções de stdio.h. Então no lugar de cout devia usar printf e no de cin scanf.

 

Não precisa usar vetor como fez com ma[20] e o enunciado não pede isso. Seu código tem muitos loops e poderia ser mais simples, algo assim,

 

#include <stdio.h>

int main(){
    int menor = 0;
    int quantidade = 0;
    
    for(int i = 0; i < 20; i += 1){
        int ano;
        int matricula;
        
        printf("Matricula: ");
        scanf("%d", &matricula);
        printf("Ano: ");
        scanf("%d", &ano);
        
        if(i == 0 || matricula < menor){
            menor = matricula;
        }
        if(ano > 2010){
            quantidade += 1;
        }
    }
    printf("Menor Matricula = %d\n", menor);
    printf("Quantidade > 2010 = %d\n", quantidade);
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Oih @AVSS  teria uma resposta melhor se desse (descrição) precisamente qual é o erro. Mas, suponho ser relacionado a variável 'i' que é definida no espaço de construção do FOR. Uma limitação de compiladores antigos e baseados neles obriga definir a variável fora desse espaço.

 

#include <stdio.h>

int main(){
    int menor = 0;
    int quantidade = 0;
    
    int i; //<<---- variável contador 
    for(i = 0; i < 20; i += 1){
        int ano;
        int matricula;
        
        printf("Matricula: ");
        scanf("%d", &matricula);
        printf("Ano: ");
        scanf("%d", &ano);
        
        if(i == 0 || matricula < menor){
            menor = matricula;
        }
        if(ano > 2010){
            quantidade += 1;
        }
    }
    printf("Menor Matricula = %d\n", menor);
    printf("Quantidade > 2010 = %d\n", quantidade);
    return 0;
}

 

Se não é esse o problema, post descrição gerada pelo compilador para que o autor tem com que dá detalhes, se precisar.

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

@AVSS   isso não é erro , e como você sabe que é na linha do for ?  ,   e qual   IDE / CMPILADOR , você está usando  ?   ,  e veja na parte de baixo que são os erros e warning's , do compilador ,  testei aqui no visual studio e não apresentou nenhum erro  .

aqui onde é a área de erros no compilador VS :

1580387791_vserros.thumb.jpg.7c649ea8cc21af09c190aeab77901bd4.jpg

Link para o comentário
Compartilhar em outros sites

9 horas atrás, AVSS disse:

20210505_001004.pdf Esse é o erro na linha do FOR. 

 

Reafirmo o que dissemos antes, trata-se de uma limitação que não mais existe atualmente, mas continua nas versões iniciais da  linguagem (penso que C90).

 

É um incomodo que as configurações padrão do seu compilador\IDE  estejam no modo clássico, mas mude isso, encontre algo parecido com "compile flags" e escreva std=c11

 

Padrão C 11, entre C90 e C2X é aquele que apresenta as atualizações mais significativas, e tenho certeza que tem na sua máquina, pois essa é a sugestão na última mensagem da aba [compilador]

 

 

EDIT:

precisa colocar um sinal (-) antes, assim:

-std=c11

Link para o comentário
Compartilhar em outros sites

Me metendo na conversa de vocês três pela última vez :)

Então eu peguei o código original do autor do tópico, considerei a entrada dos dados e fiz poucas alterações.

/*
https://www.clubedohardware.com.br/profile/1154506-avss/
https://www.clubedohardware.com.br/forums/topic/1539587-n%C3%A3o-consigo-resolver-exerc%C3%ADcio-em-linguagem-c/

Alguém Poderia me ajudar a resolver esse exercício em C.
Solicitar ao usuário os seguintes dados de até 20 alunos
Matrícula Int, positivo, 0= fim
Ano.matrícula Int, >= 2010
Exibir a menor matrícula e quantidade de alunos matriculados após ano 2010
*/

// Dados de ate 20 alunos, matricula int; positivo; ano matricula int >=2010
// Exibir a menor matricula e a quantidade de alunos matriculados apos 2010
#include <stdio.h>
int main( void ){
        int _matriculas_codigo_ [20]= {0}, 
            _matriculas_ano_ [20]= {0},
            _matriculas_tamanho_= 0;
        printf("%s",
        "NESTE PROGRAMA DESCOBRE E EXIBE A MENOR MATRICULA E A QUANTIDADE DE MATRICULAS APOS O ANO 2010\n"
        "DENTRE ATE 20 MATRICULAS DE ALUNOS\n" );
        {
                for( int idx= 0; idx < 20; ++idx ){
                        printf( "INFORME A MATRICULA (0=FIM DOS DADOS)\n" );
                        {
                                int codigo= 0;
                                int flag= scanf( " %d", &codigo );
                                          scanf( "%*[^\n]" );
                                while( 1 > flag ){
                                        printf( "Matricula Invalida.\n"
                                        "Informe Novamente: " );
                                        flag= scanf( " %d", &codigo );
                                              scanf( "%*[^\n]" );
                                }
                                if( 0 == codigo )break;
                                _matriculas_codigo_ [idx]= codigo; ///adicionar matricula
                        }
                        printf( "INFORME O ANO DA MATRICULA (ANO >= 2010)\n" );
                        {       int ano= 0;
                                int flag= scanf( " %d", &ano);
                                          scanf( "%*[^\n]" );
                                while( (1 > flag)||(2010 > ano) ){
                                        printf( "Ano Invalida.\n"
                                        "Informe Novamente: " );
                                        flag= scanf( " %d", &ano );
                                              scanf( "%*[^\n]" );
                                }
                                _matriculas_ano_ [idx]= ano; ///adicionar ano matricula
                        }
                        ++_matriculas_tamanho_; ///concluir um cadastro
        }        }
        printf( "%s%u%s",
        "Excelente! Chegamos ao final do cadastramento...\n"
        "O total de ",_matriculas_tamanho_, " matricula(s) cadastrada(s)\n\n" );
        ///<<FALTA>>
        ///   <<PROCESSAMENTO>>
        ///   <<SAIDA>>
} // fim dos dados

GDB online Debug | Compiler

Link para o comentário
Compartilhar em outros sites

@AVSS    sim , sua lógica nesse código precisa melhorar ,  para que ele faça do jeito que precisa ser ,  e essa estrutura não parece boa ,  e você pode usar outra semelhante a essa aqui :

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char matricula[10], ano_matricula[10], op[3];
int mat, contador = 0, menor_matricula, mat_apos_2010;
int main()
{
    do
    {
        op[0] = 'S';
    label_1:
        printf("numero da Matricula ");
        fgets(matricula, 9, stdin);
        matricula[strlen(matricula) - 1] = '\0';
        mat = atoi(matricula);
        if (mat == 0)
        {
            goto label_1;
        }
        if (contador == 0)
        {
            menor_matricula = mat;
        }
        if (menor_matricula > mat)
        {
            menor_matricula = mat;
        }
        contador++;
        printf("Outro Aluno S/N ");
        fgets(op, 2, stdin);
        while (char c = fgetc(stdin) != '\n');
        if (toupper(op[0] ) == 'N' || contador > 20 )
        {
            break;
        }
    } while (op[0] != 'S');
    printf("A menor matricula eh : %d\n", menor_matricula);
    return 0;
}

e as outras opções você complementa .

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...