Ir ao conteúdo
  • Cadastre-se

jpaulofsa

Membro Pleno
  • Posts

    43
  • Cadastrado em

  • Última visita

Tudo que jpaulofsa postou

  1. @devair1010 muito obrigado! Às vezes parece que nunca vou aprender programação...não sei se esse pensamento no início é algo comum ou se é devido a linguagem C ser difícil...
  2. Nome: Gabi Idade: 39 Nome: Pedro Idade: 38 Nome: Jualiano Idade: 13 arquivo: nomesidades.txt
  3. #include <stdio.h> #include <stdlib.h> int main() { FILE *p; char nome[27], idade[5], arq_nome[30]; char c; printf("\nArquivo de entrada: "); gets(arq_nome); if ((p = fopen(arq_nome, "r")) == NULL) { printf("\nErro ao abrir o arquivo %s!", arq_nome); exit(1); } printf("\nImprimindo dados do arquivo: %s\n", arq_nome); while (!feof(p)) //enquanto não encontra o fim do arquivo { c = 0; //Leitura sincronizada.. fscanf(p, "%s", nome); //salta a palavra: 'nome:' fgets(nome, 27, p); fscanf(p, "%s", idade); //salta a palavra: 'idade:' fgets(idade, 5, p); printf("\nNome: %s\nIdade: %s", nome, idade); /*Caso alguma parte se perca, e o ponteiro no arquivo fique parado em alguma parte do registro, esta rotina fara a sincronizacao.*/ while(c != '$') { c = getc(p); if (feof(p)) break; } } fclose(p); //fecha o arquivo } Bom dia, pessoal. Preciso criar um programa que leia uma lista de nomes e idades de um arquivo texto. alguém poderia me ajudar em que estou errando? Preciso que imprima uma lista, mas só está imprimindo o primeiro nome e a primeira idade...
  4. jpaulofsa

    C abortar loop em C

    @devair1010 Muito obrigado, mas agora tem coisas avançadas que não vi ainda.
  5. jpaulofsa

    C abortar loop em C

    @devair1010 Obrigado! funcionou como precisava.
  6. jpaulofsa

    C abortar loop em C

    #include <stdio.h> int main() { int num[10]; //Declara um vetor de inteiros de 10 posições int count = 0; int totalnums; do { printf ("\nEntre com um numero (-999 p/ terminar): "); scanf("%d", &num[count]); count++; } while (num[count-1]!=-999 || (num[count] < 11)) ; totalnums=count-1; printf("\n\n\n\t Os numeros que voce digitou foram: \n\n"); for (count=0; count<totalnums; count++) printf(" %d", num[count]); return(0); } Boa noite, pessoal. Preciso fazer com que o loop seja interrompido caso o usuário entre com 10 números ou caso o Flag (-999) seja digitado, pensei em inserir a condição || (num[count] < 11) dentro do while, mas não deu certo. Alguém poderia ajudar? desde já agradeço.
  7. @AnsiC Ótimo. muito obrigado. #include <stdio.h> #include <stdlib.h> int main(void) { int index = 0, contador; char letras[5] = "Joao"; /* Através do comando if e do operador % testar se o contador é divisível por 5 para fazer com que cada letra seja escrita 5 vezes seguidas antes de atualizar o index */ for (contador=0; contador<1000; contador++) { { printf("\n %c", letras[index]); if (index==3) { index=0; } else { if (contador % 5 == 0) { ++index; } } } } printf("\n\n"); system("pause"); return 0; } Mas eu precisaria que estas letras se repetissem obedecendo ao contador < 1000...teria como ou só da forma que você fez mesmo? do jeito que fiz aí tem letras que repetem 1 vez, outras às 5 vezes...
  8. #include <stdio.h> int main() { int index = 0, contador; char letras[5] = "Joao"; /* Através do comando if e do operador % testar se o contador é divisível por 5 para fazer com que cada letra seja escrita 5 vezes seguidas antes de atualizar o index */ for (contador=0; contador<1000; contador++) { { //if (letras[index] % 5 == 0) printf("\n%c", letras[index]); if (index==3) { index=0; } else { if (letras[index] % 5 == 0) { ++index; } } } } } Bom dia, pessoal. Preciso da ajuda de vocês. Gostaria, Através do comando if e do operador %, de testar se o contador é divisível por 5 para fazer com que cada letra seja escrita 5 vezes seguidas antes de atualizar o index. Alguém conseguiria me auxiliar, tentei algumas formas inclusive da forma acima, mas não está dando certo.
  9. @isrnick muito obrigado. Resolvido! não sabia desse detalhe.
  10. #include <stdio.h> int main() { int cont; for (cont = 0; cont < 256; cont++) { printf("%d = %c \n", cont, cont); } } Fala turma. Preciso de um código que pegue os números de 0 a 255 e imprima o código ASCII correspondente. Pensei da forma acima, mas o problema é que ele esta começando a imprimir do 108 até o 255, não sei o porque tá ignorando do 0 ao 107. Alguém poderia ajudar?
  11. #include <stdio.h> #include <stdlib.h> struct tipo_no { int dado; struct tipo_no * proximo; }; typedef struct tipo_no No; struct tipo_lista{ No *primeiro; No *ultimo; }; typedef struct tipo_lista Lista; void criarLista(Lista* lista){ lista->primeiro = NULL; lista->ultimo=NULL; } int listaVazia(Lista* lista){ if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1; else return 0; } void inserirFinal(Lista* lista,int valor){ No *novo; novo = (No*)malloc(sizeof(No)); novo->dado = valor; novo->proximo=NULL; if(listaVazia(lista)==1){ lista->primeiro = novo; }else{ (lista->ultimo)->proximo = novo; } lista->ultimo = novo; } void inserirInicio(Lista* lista,int valor){ No *novo; novo = (No*)malloc(sizeof(No)); novo->dado = valor; novo->proximo=NULL; if(listaVazia(lista)==1){ lista->ultimo = novo; }else{ novo->proximo = lista->primeiro; } lista->primeiro = novo; } //Função que adiciona os números pares no início da lista e os números ímpares no final da lista void inserir(Lista* lista, int valor){ if((valor % 2) == 0){ inserirInicio(lista, valor); } else { inserirFinal(lista, valor); } } void listar(Lista* lista){ No* ponteiro = lista->primeiro; while(ponteiro!= NULL){ printf("%d ",ponteiro->dado); ponteiro = ponteiro->proximo; } printf("\n"); } int main(int argc, char *argv[]){ Lista* lista = (Lista*) malloc(sizeof (Lista)); criarLista(lista); int op=0,valor; do{ system("cls"); printf("\n1-Inserir Numero\n2-Listar\n3-Sair\n"); scanf("%d",&op); switch(op){ case 1:printf("\nInforme o Valor:"); scanf("%d",&valor); inserir(lista,valor); break; case 2:system("cls"); listar(lista); system("PAUSE"); } }while(op != 3); system("PAUSE"); return 0; } Muito obrigado.
  12. #include <stdio.h> #include <stdlib.h> struct tipo_no { int dado; struct tipo_no * proximo; }; typedef struct tipo_no No; struct tipo_lista{ No *primeiro; No *ultimo; }; typedef struct tipo_lista Lista; void criarLista(Lista* lista){ lista->primeiro = NULL; lista->ultimo=NULL; } int listaVazia(Lista* lista){ if ((lista->primeiro == NULL) || (lista->ultimo==NULL)) return 1; else return 0; } void inserirFinal(Lista* lista,int valor){ No *novo; novo = (No*)malloc(sizeof(No)); novo->dado = valor; novo->proximo=NULL; if(listaVazia(lista)==1){ lista->primeiro = novo; }else{ (lista->ultimo)->proximo = novo; } lista->ultimo = novo; } void inserirInicio(Lista* lista,int valor){ No *novo; novo = (No*)malloc(sizeof(No)); novo->dado = valor; novo->proximo=NULL; if(listaVazia(lista)==1){ lista->ultimo = novo; }else{ novo->proximo = lista->primeiro; } lista->primeiro = novo; } //Função que adiciona os números pares no início da lista e os números ímpares no final da lista void inserir(Lista* lista, int valor){ if(lista(valor) % 2 = 0){ inserirInicio(); } else { inserirFinal(); } } void listar(Lista* lista){ No* ponteiro = lista->primeiro; while(ponteiro!= NULL){ printf("%d ",ponteiro->dado); ponteiro = ponteiro->proximo; } printf("\n"); } int main(int argc, char *argv[]){ Lista* lista = (Lista*) malloc(sizeof (Lista)); criarLista(lista); int op=0,valor; do{ system("cls"); printf("\n1-Inserir no Final\n2-Inserir no Inicio\n3-Listar\n4-Sair\n"); scanf("%d",&op); switch(op){ case 1:printf("\nInforme o Valor:"); scanf("%d",&valor); inserirFinal(lista,valor); break; case 2:printf("\nInforme o Valor:"); scanf("%d",&valor); inserirInicio(lista,valor); break; case 3:system("cls"); listar(lista); system("PAUSE"); } }while(op != 4); system("PAUSE"); return 0; } Boa tarde! preciso fazer a implementação da função: //Função que adiciona os números pares no início da lista e os números ímpares no final da lista void inserir(Lista* lista, int valor){ if(lista(valor) % 2 = 0){ inserirInicio(); } else { inserirFinal(); } } para caso o novo número inserido seja para, vá para o início da lista e caso ímpar, vá para o final da lista. Para isso já foram implementadas as funções InserirFinal() e InserirInicio(), alguém poderia me ajudar e esclarecer onde estou errando?
  13. @AnsiC Obrigado! O erro era o uso de uma } dá nem pra creditar rsrsrs. muito obrigado.
  14. #include <stdio.h> #include <stdlib.h> struct funcionario{ //struct que cria o tipo char para nome e float para salário char nome[50]; //nome funcionario float salario; //salário funcionário }; typedef struct funcionario funcionario_t; //typedef nomeia a struct funcionario para funcionario_t void cadastra_funcionario(funcionario_t lista_funcionario[], int tamanho_lista) { funcionario_t novo_funcionario; tamanho_lista = 0; printf("Digite nome do funcionario: \n"); scanf("\n%s", novo_funcionario.nome); printf("Digite salario do funcionario \n"); scanf("\n%f", &novo_funcionario.salario); lista_funcionario[tamanho_lista] = novo_funcionario; tamanho_lista++; } funcionario_t maior_salario(funcionario_t lista_funcionario[], int tamanho_lista){ //funcao para maior salario if (tamanho_lista > 0) { int i, maior_indice; float maior_salario = 0; for (i = 0; i < tamanho_lista; i++) { if (lista_funcionario[i].salario > maior_salario) { maior_salario = lista_funcionario[i].salario; maior_indice = i; } printf("Nome funcionario: %s\n", lista_funcionario[maior_indice]); printf("Maior salario funcionario: %f\n", maior_salario); } } } int main(void){ //função main, chama as funcões acima funcionario_t lista_funcionario[50]; int tamanho_lista = 0; int continuar = 1; char opcao; do{ printf("===================================\n"); //insere uma "barra" printf(" Digite 1 para cadastrar: \n Digite 2 para maior salario:\n Digite 0 para sair:\n ==> "); //mostra "menu" em números para evitar case sensitive se houver. scanf("\n\n%c", &opcao); switch(opcao){ case '1': cadastra_funcionario(lista_funcionario, tamanho_lista); //chama funcao cadastra_funcionario tamanho_lista++; break; case '2': maior_salario(lista_funcionario, tamanho_lista); //chama funcao maior_salario break; case '0': continuar = 0; default: // em caso de não informar nenhum numero encerra o programa continuar = 0; } } while (continuar == 1);{ //continuar a execução do do getchar(); return 0; } } Boa tarde! estou tentando desenvolver este programa que tem que ter além da função main, as funções voidcadastra_funcionario e funcionario_tmaior_salario...o ojetivo é que o programa receba os dados dos funcionários e ao solicitar informações sobre o funcionário de maior salário, retorne o Nome e o maior salário...acontece que o printf retorna o nome e o maior salário, de fato, do funcionário, mas a quantidade de vezes do número de funcionários cadastrados...alguém poderia ajudar!?
  15. @devair1010 @Lobarinhas obrigado, guerreiros. vacilei legal...agora rodou, muito obrigado.
  16. #include <stdio.h> #include <locale.h> int main(void) { const int bimestresAnuais = 4; //constantes porque não podem ser alteradas durante o programa, são variáveis fixas. const int numeroDeAlunos = 4; float notasAlunos[numeroDeAlunos][bimestresAnuais] = {0}; float mediasAlunos[numeroDeAlunos] = {0}; float media = 0; int aluno, notas; printf("Insira as 4 notas do aluno 1:\n"); for (aluno = 0; aluno < numeroDeAlunos; aluno++) { for (notas = 0; notas < bimestresAnuais; notas++) { scanf("%f", &notasAlunos[aluno][notas]); media += notasAlunos[aluno][notas]; } mediasAlunos[aluno] = media / bimestresAnuais; media = 0; //reseta a variável média para iniciar novo ciclo printf("Insira as 4 notas do aluno %i:\n", aluno + 2); } for (aluno = 0; aluno < numeroDeAlunos; aluno++) { printf("A media do aluno %i é %.2f\n", aluno + 1, mediasAlunos[aluno], setlocale(LC_ALL, "")); } return 0; system("pause"); } Estou tentando compilar este programa e está apresentando os seguintes erros: In function 'main': [Error] variable-sized object may not be initialized [Warning] excess elements in array initializer [Warning] (near initialization for 'notasAlunos[0]') [Warning] excess elements in array initializer [Warning] (near initialization for 'notasAlunos') [Error] variable-sized object may not be initialized [Warning] excess elements in array initializer [Warning] (near initialization for 'mediasAlunos') Alguém saberia dizer porque está dando esse erro!? no exemplo do professor rodou....
  17. @devair1010 Muito obrigado, Devair. Não conhecia (media_idade += lista_funcionarios[i/**tamanho_lista*/].idade / *tamanho_lista;) esse operador += ficquei com uma certa dúvida nessa linha, mas me ajudou muito.
  18. #include <stdio.h> #include <ctype.h> // Uso da função toupper struct funcionario{ char nome[50]; float idade; }; struct funcionario lista_funcionarios[50]; void cadastra_funcionario(int* tamanho_lista){ printf("Informe o nome do funcionario \n"); scanf("%s[^\n]%*c", lista_funcionarios[*tamanho_lista].nome); printf("Informe a idade do funcionario \n"); scanf("%f%*c", &lista_funcionarios[*tamanho_lista].idade); (*tamanho_lista)++; } void media_idade(struct funcionario lista_funcionarios[], int* tamanho_lista) { if (*tamanho_lista > 0) { int i, maior_indice = 0; float media_idade; media_idade = lista_funcionarios[*tamanho_lista].idade / *tamanho_lista; printf("Media de idade dos funcionarios cadastrados e: %f \n", media_idade); } } int main(void) { int tamanho_lista = 0; int continuar = 1; char opcao; do { printf ("Digite C para cadastrar ou M para saber a media de idade dos funcionarios \n"); scanf("%c%*c", &opcao); opcao = toupper(opcao); switch (opcao) { case 'C': cadastra_funcionario( &tamanho_lista); break; case 'M': media_idade(lista_funcionarios, &tamanho_lista); break; default: continuar = 0; } } while (continuar == 1); getchar(); return 0; } Preciso calcular a média de idade dos funcionários cadastrados...não estou conseguindo, além de, após calcular média, o programa não encerra e continua solicitando para cadastrar ou calcular a media...alguém poderia ajudar-me!? e explicar o que estou fazendo de errado, se possível...
  19. Muito Obrigado a todos. adicionado 8 minutos depois @Mauro Britivaldo e aos demais colegas, quer dizer que o comando sizeof força a variável armazenar bytes por passagem de parâmetros mesmo de capacidades diferentes? tipo: char só suporta 1 byte e short suporta 2 bytes, com o comando sizeof o ponteiro entres esses dois tipos é possível? foi que ocorreu no código Obs.: O programa estava com outro probleminha que percebi depois, mas foi resolvido, a variável soma também era do tipo short e quando a soma dava mais que o valor suportado pelo tipo short, o programa apresentava erro, conseguir resolver declarando soma como int. adicionado 8 minutos depois @Mauro Britivaldo e aos demais colegas, quer dizer que o comando sizeof força a variável armazenar bytes por passagem de parâmetros mesmo de capacidades diferentes? tipo: char só suporta 1 byte e short suporta 2 bytes, com o comando sizeof o ponteiro entres esses dois tipos é possível? foi que ocorreu no código Obs.: O programa estava com outro probleminha que percebi depois, mas foi resolvido, a variável soma também era do tipo short e quando a soma dava mais que o valor suportado pelo tipo short, o programa apresentava erro, conseguir resolver declarando soma como int.
  20. #include <stdio.h> #include <stdlib.h> void soma(short* a, short* b) { *a = x; *b = y; } int main(void) { char x, y; //2 variáveis do tipo char printf("Informe um numero entre -32767 e 32767\n"); scanf("%c", &*x); printf("Informe outro numero entre -32767 e 32767\n"); scanf("\n%c", &*y); a = x; b = y; short soma = a + b; printf("Primeiro numero eh: %hi\n", x); printf("Segundo numero eh: %hi\n", y); printf("A soma dos numeros eh: %hi\n", soma); system ("pause"); return 0; } Boa Noite! Preciso criar um programa que recebe dois números inteiros (short) que possam ser armazenados por variáveis (char) e transfiram seus valores para variáveis do tipo short e some os valores desses dois números, salvando o resultado também em uma variável do tipo short. Penso que isso deve ser feito através de ponteiros, mas já quebrei a cabeça e não saio do lugar. Algum colega conseguiria ajudar-me!?
  21. @vangodp obrigado! excelente explicação, ajudou-me muito.
  22. muito obrigado adicionado 8 minutos depois @cyer muito obrigado. adicionado 21 minutos depois @vangodp muito obrigado. Não conhecia essa biblioteca: #include <ctype.h>. Minha dúvida é: printf("Informe o nome do funcionario \n"); scanf("%s[^\n]%*c", lista_funcionarios[*tamanho_lista].nome); printf("Informe o salario do funcionario \n"); scanf("%f%*c", &lista_funcionarios[*tamanho_lista].salario); 1. Porque o segundo scanf armazena o salário do funcionário (através do &) e o primeiro scanf não? 2. qual o objetivo do primeiro comando scanf percorrer os caracteres ([^\n])? 3. qual o objetivo do getchar() no final do programa? Fico muito grato se puder esclarecer-me essas dúvidas, tenho outras dificuldades, mas acredito que é por estar tendo os primeiro contatos e logo logo serão sanadas...
  23. #include <stdio.h> #include <stdlib.h> struct funcionario { //cria a struct funcionario char nome[50]; //cria a variável nome float salario; //cria a variável salario }; typedef struct funcionario funcionario_t; void cadastra_funcionario () { //função que cadastra um novo funcionário funcionario_t lista_funcionarios[50]; funcionario_t novo_funcionario; int tamanho_lista = 0; printf("Informe o nome do funcionario \n"); scanf("\n%s", &novo_funcionario.nome); printf("Informe o salario do funcionario \n"); scanf("\n%f", &novo_funcionario.salario); lista_funcionarios[tamanho_lista] = novo_funcionario; tamanho_lista++; //fim da função que cadastra um novo funcionário } funcionario_t maior_salario(funcionario_t lista_funcionarios[], int tamanho_lista) { //função que encontra o funcionário com maior salário //int tamanho_lista = 0; if (tamanho_lista > 0) { int i, maior_indice; float maior_salario = 0; for (i = 0; i < tamanho_lista; i++) { if (lista_funcionarios[i].salario > maior_salario) { maior_salario = lista_funcionarios[i].salario; maior_indice = i; } printf("Nome: %s\n", lista_funcionarios[maior_indice]); printf("Maior salario: %f\n", maior_salario); } } //fim da função que encontra o funcionário com maior salário } int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário { funcionario_t lista_funcionarios[50]; int tamanho_lista = 0; int continuar = 1; char opcao; do { printf ("Digite C para cadastrar ou M para saber o maior salario \n"); scanf("\n\n%c", &opcao); switch (opcao) { case 'C': cadastra_funcionario(lista_funcionarios, tamanho_lista); tamanho_lista++; break; case 'M': maior_salario(lista_funcionarios, tamanho_lista); break; default: continuar = 0; } } while (continuar ==1); { //fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário system("pause"); return 0; } } Boa noite, tentei criar um programa que cadastra funcionários e seus respectivos salários. Este se utiliza de 3 funções: main, cadastra_funcionario e maior_salario, acontece que quando o usuário solicita o maior salário, O PROGRAMA retorna (através do printf) o nome e o salário de todos os cadastrados e sem nenhum valor. outra coisa é que o programa só aceita como dado de entrada 'C' ou 'M' em maiúsculas para cadastrar ou saber o maior salário. Já quebrei a cabeça e nada, alguém poderia me ajudar?
  24. @Simon Viegas muito obrigado pelas dicas, Simon. Realmente a questão do contrassenso de criar a variável vogais para consoantes eu tinha percebido e é uma excelente observação sua. Não mudei pelo fato de estar iniciando e após bater cabeça com o que parece "simples", para alguns, fiquei com receio de dar problema de novo no programa. Quanto ao fato da "dicotomia", como havia falado, não vi ainda bibliotecas que aceita acentuação gráfica e outros conceitos e por isso o programa foi feito como se só existisse vogais e consoantes mesmo e em letras minúsculas, sem acentos... Agradeço muito sua observação e dicas, contribuiu e vai contribuir muito para meu aprendizado...Deus retribua em dobro a vocês, pois "quem ensina algo, aprende duas vezes".

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