Ir ao conteúdo

Posts recomendados

Postado

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

Postado

Estou estudando linguagem C, no começo ainda. Estou vendo fluxograma para depois colocar em C. Então a dificuldade é colocar essas informações na linguagem C. A partir daí eu tento fazer o fluxograma. 

Postado

@Angela Maria Declare as variáveis da quantidade e menor matrícula. Crie um loop/laço (como o for) e nele pegue as entradas da matrícula e ano com a função scanf. Com esses valores aplique os critérios do enunciado, use o if para testar os dados informados.

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

Postado

@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
Postado

@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
Postado

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

 

Postado

@Midori No For do código que enviou, está dando erro. Parece estar correto, pesquisei pra ver se tinha algo errado, mas não. Não passa dessa linha.

  • Confuso 1
Postado

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
Postado

@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

Postado

@AVSS O problema deve ser o que o @mauro_b comentou. Para resolver declare a variável i fora (ou atualize para um compilador mais recente), p.ex veja que tirei o "int i = 0" do for e só ficou i = 0,

 

int i;

for(i = 0; i < 20; i += 1){
...

 

Postado
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

Postado

@devair1010 , consegui fazer no VS, o código funcionou perfeitamente, porém ao final ele não exibe a menor matrícula e a quantidade de matrículas > 2010. Não tem como finalizar, e colocando dados errados, ele aceita e vai pedindo matrícula, ano.

  • Confuso 1
Postado

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

Postado

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

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