Ir ao conteúdo
  • Cadastre-se

1freakday

Membro Pleno
  • Posts

    670
  • Cadastrado em

  • Última visita

Tudo que 1freakday postou

  1. Não faz mal o printf estar fora da função, desde que a função tenha logica, porém quando você declarou a função somaDoisNumeros(), você colocou dois argumentos int num1 e int num2, por isso o Ciro colocou a parte do printf e scanf na função main(), para fazer a utilização desses argumentos, então a função só tem o papel de utilizar os valores e retornar a soma, mas não ira mostrar a parte de mensagens na função, porém são muitas formas de usar, como: #include<stdio.h> /* Protótipos */ int somaDoisNumeros(); /* Função Principal */ int main() { int Resultado_Soma = 0; //voce pode obter o resultado em uma variavel e imprimir a variavel //com printf assim: Resultado_Soma = somaDoisNumeros(); printf("Resultado 1: %d\n",Resultado_Soma); //Ou pode imprimir diretamente o resultado da funcao //so que sera necessario digitar novamente. printf("Resultado 2: %d\n",somaDoisNumeros()); return 0; } /* Funções */ int somaDoisNumeros() { int num1, num2; printf("Digite o 1o. numero: "); scanf("%d", &num1); printf("Digite o 2o. numero: "); scanf("%d", &num2); return num1 + num2; //<-- Retorna a soma }
  2. Espero ajudar: #include<stdio.h> #include<stdlib.h> int main() { //Ano é formado apenas por inteiros int anoatual = 0; float i, salario, novosalario, perc, percSal; printf ("DIGITE O ANO ATUAL(maior que 2005): \n"); scanf ("%d", &anoatual); //Salario salario = 1000; //Porcentagem a ser usada perc = 1.5; //Salario referente a porcentegam percSal = 1000 / perc; //Como estamos no ano inicial, nao usamos a porcentagem do ano passado novosalario=salario; //Como ja comecamos com 2006 acima, vamos continuar em 2006 for (i=2006;i<=anoatual;i++) { //Porcentagem do salario anterior dobrada percSal=(novosalario/perc)*2; //Novo salario é o antigo mais a porcentagem do salario novosalario+=percSal; } printf ("O SALARIO NO ANO ATUAL: %.2f", novosalario); getchar(); return 0; }
  3. Para salvar em um arquivo, utilize a seguinte logica: 1-você precisa saber se o arquivo existe ou não, senão criar ele. 2-Apos criar ele para salvar os dados, você vai ter que fecha-lo e abri-lo no modo "a" que vai dar a possibilidade de sempre 'incrementar' um arquivo, sem apagar os dados anteriores. Exemplo de criação e salvamento de arquivo, lembrando que se você fechar o programa enquanto o arquivo não for fechado, os dados são perdidos: #include<stdio.h> #include<stdlib.h> #include<string.h> bool criar_arquivo(const char *); bool incrementar_arquivo(FILE *,const char *); ///@brief Funcao principal int main(void) { FILE *fp = NULL; char tmp[128]; tmp[0]='\0'; //criar arquivo while(1){ system("cls"); printf("\nDigite o nome do arquivo:"); gets(tmp); if(!criar_arquivo(tmp)){ printf("Digite um nome de arquivo inexistente!\n"); getchar(); }else break; } //implementar arquivo fp = fopen(tmp,"a"); while(1){ system("cls"); printf("\nDigite um texto ou SALVAR p/ salvar o arquivo:"); gets(tmp); if(strcmp(tmp,"SALVAR") == 0)break; if(!incrementar_arquivo(fp,tmp)){ printf("Falha ao adicionar texto ao arquivo: %s!\n",fp->_tmpfname); getchar(); break; } } fclose(fp); return 0; } ///@brief Funcao para incrementar uma linha a um arquivo aberto bool incrementar_arquivo(FILE *file,const char *text){ if(file == NULL){ return false; } fprintf(file,"%s\n",text); return true; } ///@brief Funcao para criar arquivo se nao existir bool criar_arquivo(const char *arquivo){ FILE *fp = NULL; fp = fopen(arquivo,"w"); if(!fp){ return false; } fclose(fp); return true; }
  4. Dica: Sempre comente partes do programa que venham a facilitar o entendimento do algorítimo, mesmo que seja um comentário pequeno e que só você entenda, eventualmente você vai ter que ler o programa todo só para entender pra que funciona aquela parte que você não comentou. #include<stdio.h> #include<stdlib.h> ///@brief Funcoes declaradas int inverte_vetor(int *vet1, int *vet2, int tamanho); void multiplica_escalar(int *vet1, int *vet2, int x, int n); ///@brief Funcao principal int main(void) { //Dec Variavel int tamanho, maior = 0, x = 0, i = 0; //Questionario printf("Digite o tamanho do vetor:"); scanf("%d",&tamanho); //Dec Vetores int v1[tamanho-1], v2[tamanho-1], v3[tamanho-1]; //Loop - receber dados no vetor 1 for(i=0; i<tamanho; i++) { printf("Digite o elemento \n"); scanf("%d", &v1[i]); } //*1 ERRO ENCONTRADO - VETOR 2 SENDO USADO - SENDO QUE AINDA NÃO RECEBEU // NENHUM DADO; //**2 ERRO ENCONTRADO - VETOR V1 SEM COCHETES([]) PARA IDENTIFICAR O VALOR ACESSADO //***CORRIGIDO //Mostra vetor 1 printf("Vetor 1:\n"); for(i=0; i<tamanho; i++) { printf("[%d]=%d\n", i, v1[i]); } //Inverter valores do vetor maior = inverte_vetor(v1, v2, tamanho-1); //Mostra vetor 2 printf("Vetor 2:\n"); for(i=0; i<tamanho; i++) { printf("[%d]=%d\n", i, v2[i]); } //Maior numero vetor 1 printf("Maior numero encontrado no Vetor 1: %d\n", maior); //Parte 2 - questionario valor X printf("Digite o valor de x: \n"); scanf("%d",&x); //Multiplicar vetor 3 p/ x - v2 envia dados - v3 recebe multiplica_escalar(v2, v3, x, tamanho-1); //Mostra vetor 3 printf("Vetor 3:\n"); for(i=0; i<tamanho; i++) { printf("[%d]=%d\n", i, v3[i]); } return 0; } ///@brief Inverter valores de vet1 e enviar para vet2 int inverte_vetor(int *vet1, int *vet2, int tamanho){ int maior = 0; for(int i = 0; i <= tamanho; i++) { *(vet2+i)=*(vet1+(tamanho-i)); if(*(vet2+i) > maior) { maior = *(vet2+i); } } return maior; } ///@brief Inverter valores de vet1 e enviar para vet2 void multiplica_escalar(int *vet1, int *vet2, int x, int tamanho) { for(int i=0; i<=tamanho; i++) { *(vet2+i)=*(vet1+i)*x; } }
  5. 1freakday

    Engenharia reversa

    Teoricamente, quem faz isso não é apenas os "Crackers" e sim os Analistas Forenses ou "Perito Digital", que no caso são especialistas em estudo e desvendar os segredos de um programa, ou dispositivo eletrônico, para descobrir como um programa funciona a partir da engenharia social entre muitos outros métodos, poucos conhecidos e uteis, porém o processo ainda é lento, um exemplo de analise de um programa seria um Hex Editor, que analisa os dados de um arquivo dll, exe, etc e encontra a parte que não foi protegida pelo programador, conhecido como Strings, etc. E a a partir do que você conseguir, você pode montar em esquema ou mapa de conceito, para tentar decifrar como tal programa funciona.
  6. Uma função sempre vai poder retornar seu tipo de função, assim se declararmos: tipo funçao (){ retorno tipo; } Podemos usar vários tipos, struct, char, int, double, float e ate tipos personalizados.
  7. O calculo é simples, você tem 3 linhas x 3 colunas na matriz, o que resulta em 9 valores, para que sejam iguais... Dica comece o contador confere = 1 e no if(confere == 7) troca por if(confere==9)
  8. Não sei bem se foi isso que você pediu, mas segue o codigo: #include<stdio.h> int y[2][2][2]; int l = 1; int maior = 0; void data_entry(); void e_primo(); main() { e_primo(); getchar(); return 0; } /* Entrada de dados */ void data_entry(){ register int i,j,k; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 3; k++) { printf("Digite o elemento [%d] de 27: ",l++); scanf("%d", &y[i][j][k]); } } } } void e_primo() { /* Entrada de dados */ data_entry(); /* Variaveis */ int i = 0, j = 0, k = 0; int i2, div = 0, x = 0; /* Loop Primo */ while(1){ x = y[i][j][k]; for (i2 = 1; i2 <= x; i2++) if (x % i2 == 0) div++; if (div == 2) maior = x; if(k >= 2){ k = 0; j++; }else k++; if(j > 2){ j = 0; k = 0; i++; } if(i >= 3)break; } /* Saída */ printf("Maior primo: %d", maior); }
  9. So fazer uma função que vai chamar ela mesma caso o resultado dê negativo, ai o resultado positivo é mostrado na funcao main e os dados são digitados nessa função que faz o calculo
  10. Presta atenção no seguinte, quando você declara um valor para uma matriz, como em y[3], 3 é a quantidade de valores que contem na matriz, porém, quando você for acessar você não começa por 1, por que de padrão acessamos de 0 para cima, então no caso de ser y[3] podemos acessar y[0], y[1] e y[2], se tentar acessar um valor maior que a quantidade de valores, poderá haver um erro no dado acessado, pois o local não foi declarado e então não ha um endereço na memoria que possa ser acessado. Esse erro pode ser encontrado no seu loop, onde as variáveis estão começando com 1 e terminado < 4.
  11. Kkkkkk acho que eles ainda não investigaram, se viram ainda não arrumaram, mas é verdade é: [ i ] [ j ] [ k ]
  12. Tem ruby, cobol, perl,etc, são muitas, mas você deveria apenas aprender aquilo que você quer usar por um bom tempo, se não, você sera "Jack of all, Master of none".
  13. "meu DEOS", 1 milhão de vezes é muito em... Porém é bem simples, pelo que verifiquei você apenas precisa criar certas variáveis e depois criar condições no loop, para quando vai mudar o divisor /3 /5 /7, e quando sera utilizado os operadores - e +, exemplo: #include <stdio.h> int main(){ register double n; //Numero do loop double num = 4.00; //Numero inicial double temp = 0.00; bool oplus = false; //Sinaliza quando sera usado o operador plus(+) ou minus(-) //Loop com contagem a 1000000(um milhao) for(n = 3; n <= 1000000; n+=2){ if(oplus){ //Operador + temp = num + 4/n; printf("Calculo: %.2f + (4/%.2f) = %.2f\n", num,n,temp); num = temp; oplus = false; }else{ //Operador - temp = num - 4/n; printf("Calculo: %.2f - (4/%.2f) = %.2f\n", num,n,temp); num = temp; oplus = true; } } printf("The End!\n"); getchar(); return 0; }
  14. Da proxima vez verifica os erros do compilador, por que seu erro foi grosseiro, sinceramente, então o erro é que você não esta utilizando o '[' ']' para identificar qual struct cliente você esta acessando, já que você tem um array de struct, segue o código editado: #include <stdio.h> #include <conio.h> #include <windows.h> #include <string.h> #define MAX 20 typedef struct contrato { short int cod_vc; // codigo do veiculo ( entre 1000 e 9999) short int cod_cl; // codigo cliente (entre 1000 e 9999) float preco_dia; // valor diario em unidades monetarias € - caravanas -100€/dia float preco_km; // valor em Km andado em unidades metricas - autocaravanas - 2€/Km float qt_km; // quilometros percoridos //data_tipo data_ini; // data inicio aluguer - 01 jan 2012 //data_tipo data_fim; // data fim de aluguer char escritorio_ini[10]; // escritorio onde o veiculo é alugado - Lisboa Porto Coimbra Algarve Braga Aveiro char escritorio_fim[10]; // escritorio onde o veiculo é devolvido - Lisboa Porto Coimbra Algarve Braga Aveiro }contrato_tipo; // estrutura veiculo typedef struct veiculo { short int cod_vc; // codigo veiculo (entre 10 e 99) char marca[10]; // marca veiculo autocaravanas - Adria (Coral,Action) Burstner(Travel,Club,Holiday) Kabe(Travelmaster) char modelo[10]; // modelo veiculo // caravanas - Adria (Linea,Adora, Alpina) Burstner(City,) Kabe (Royal,Eximo) char matricula[8]; // matricula do veiculo 00-00-AA short int cod_categoria; // categoria do veiculo: autocaravanas - capucine, integral, perfilada, furgao | caravanas - citadina, utilitaria, familiar float km; // quilometragem actual do veiculo em Km float qt_comb; // quantidade de combustivel no deposito em Litros char estado; // estado veiculo : 'D' - disponivel; 'A' - alugado }veiculo_tipo; // estrutura cliente typedef struct cliente // nome cliente desnecessário { short int cod_cl; // código cliente (entre 1000 e 9999) // short int –32,768 to 32,767 char nome [30]; // nome do cliente maximo 30 caracteres char morada[40]; // morada do cliente maximo 40 caracteres short int tipo; // tipo de cliente ( 0- cliente normal; 1- cliente de risco) char carta_conducao[5]; // numero de carta de condução 123456 veiculo_tipo veiculo; contrato_tipo contrato; }cliente_tipo; // estrutura data typedef struct data { short int dia; // dia 1-31 char mes[3]; // jan,fev...dez short int ano; // ano 2012 }data_tipo; char categoria[][20]={"capucine","integral","perfilada","furgao","citadina","utilitaria","familiar"}; short int mes_dias[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; // funcoes escrever/ler/mostrar/eliminar/alterar cliente, veiculo, contrato, data //funcao escrever cliente/veiculos/contratos void escrever_cliente(cliente_tipo *cliente, int qtd_clientes) { int i; char D,A; for(i=0;i<qtd_clientes;i++) { //**** clientes *****// printf(" \n\n --- cliente %d --- ",i+1); fflush(stdin); //limpa o buffer do teclado printf(" \n qual o codigo do cliente ? "); scanf("%d",&cliente[i].cod_cl); // -> porque cliente é um vetor while(cliente[i].cod_cl<1000 || cliente[i].cod_cl>9999 && cliente[i].cod_cl != cliente[i].cod_cl) // falta - os codigos nao podem ser iguais na mesma estrutura { printf(" \n erro ! digite o codigo do cliente com 4 digitos \n"); scanf("%d",&cliente[i].cod_cl); // gets - le strings (cadeia de caracteres com espaços), scanf - le so numeros ou uma unica letra ? } fflush(stdin); printf(" \n qual o nome do cliente ? "); gets(cliente[i].nome); // equivalente a : scanf("%d",&(*cliente).nome); x-> igual a (*x). fflush(stdin); printf(" \n qual o morada do cliente ? "); gets(cliente[i].morada); fflush(stdin); printf(" \n qual o tipo de cliente ? "); scanf("%d",&cliente[i].tipo); while(cliente[i].tipo!=0 && cliente[i].tipo!=1) { printf(" \n erro ! digite o tipo de cliente 0- cliente normal 1- cliente de risco \n"); scanf("%d",&cliente[i].tipo); // gets - le strings (cadeia de caracteres com espaços), scanf - le so numeros ou uma unica letra ? } fflush(stdin); printf(" \n qual o numero da carta de conducao ? "); gets(cliente[i].carta_conducao); // equivalente a : scanf("%d",&(*cliente).nome); x-> igual a (*x). //**** veiculos *****// printf(" \n\n --- veiculo %d --- ",i+1); fflush(stdin); //limpa o buffer do teclado printf(" \n qual o codigo do veiculo ? "); scanf("%d",&cliente[i].veiculo.cod_vc); // você - codigo do veiculo while(cliente[i].veiculo.cod_vc < 10 || cliente[i].veiculo.cod_vc > 99) // falta - os codigos nao podem ser iguais na mesma estrutura { printf(" \n erro ! digite o codigo do veiculo com 2 digitos \n"); scanf("%d",&cliente[i].veiculo.cod_vc); // gets - le strings (cadeia de caracteres com espaços), scanf - le so numeros ou uma unica letra ? } fflush(stdin); printf(" \n qual a marca do veiculo ? "); // < Adria ou Burstner ou Kabe> gets(cliente[i].veiculo.marca); fflush(stdin); printf(" \n qual o modelo do veiculo ? "); // < autocaravanas - Adria(Coral,Action), Burstner(Travel,Club,Holiday) e Kabe(Travelmaster) | caravanas - Adria(Linea,Adora,Alpina), Burstner(City,) e Kabe (Royal,Eximo) > gets(cliente[i].veiculo.modelo); fflush(stdin); printf(" \n qual a matricula do veiculo ? "); // < 00-00-AA > gets(cliente[i].veiculo.matricula); fflush(stdin); printf(" \n qual o numero da categoria do veiculo ? "); // codigo categoria deve variar entre 0 e 4 // <autocaravanas - 1-capucine, 2-integral, 3-perfilada, 4-furgao | caravanas - 5-citadina, 6-utilitaria, 7-familiar > scanf("%d",&cliente[i].veiculo.cod_categoria); fflush(stdin); printf(" \n quilometragem actual do veiculo ?"); scanf("%f",&cliente[i].veiculo.km); fflush(stdin); printf(" \n qual a quantidade de combustivel no deposito ? "); scanf("%f",&cliente[i].veiculo.qt_comb); fflush(stdin); printf("\n qual o estado do veiculo? <'D' -disponivel ou 'A' - alugado> "); scanf("%c",&cliente[i].veiculo.estado); while(cliente[i].veiculo.estado != 'D' && cliente[i].veiculo.estado != 'd' && cliente[i].veiculo.estado != 'A' && cliente[i].veiculo.estado != 'a') { printf("\n opcao invalida! qual o estado do veiculo? <'D' -disponivel ou 'A' -alugado >\n"); scanf("%c",&cliente[i].veiculo.estado); // gets - le strings (cadeia de caracteres com espaços), scanf - le so numeros ou uma unica letra ? } //**** contratos *****// printf(" \n\n --- contrato %d --- ",i+1); printf(" \n o codigo do cliente %d e %hd ",i+1,cliente[i].cod_cl); fflush(stdin); printf(" \n o codigo do veiculo %d e %hd ",i+1,cliente[i].veiculo.cod_vc); fflush(stdin); printf(" \n qual o preco diario de aluguer ? <caravanas> "); scanf("%f",&cliente[i].contrato.preco_dia); fflush(stdin); printf(" \n qual o preco por quilometro ? <autocaravanas>"); scanf("%f",&cliente[i].contrato.preco_km); fflush(stdin); printf(" \n quantos quilometros percorridos ? "); scanf("%f",&cliente[i].contrato.qt_km); fflush(stdin); /*printf(" \n qual a data de inicio de aluguer ? "); scanf("%s",&cliente.contrato.data_ini); fflush(stdin); printf(" \n qual a data de fim de aluguer ? "); scanf("%s",&cliente.contrato.data_fim); fflush(stdin); */ printf(" \n qual o destrito do escritorio em que alugou o veiculo ? "); gets(cliente[i].contrato.escritorio_ini); fflush(stdin); printf(" \n qual o destrito do escritorio em que devolveu o veiculo ? "); gets(cliente[i].contrato.escritorio_fim); fflush(stdin); printf("\n prima qualquer tecla para continuar"); getchar(); } } // mostra todos os clientes guardados em memoria, o parametro qtd_clientes é a quantidade de clientes void mostrar_cliente(cliente_tipo *cliente, int qtd_clientes) {//permite visualizar o conteudo da estrutura , só printf´s com %s ou %d int i; for(i=0;i<qtd_clientes;i++) { printf(" \n\n cliente %d ",i+1); printf(" \n codigo do cliente : %d ",cliente[i].cod_cl); printf(" \n nome do cliente : %s ",cliente[i].nome); printf(" \n morada : %s ",cliente[i].morada); printf(" \n tipo de cliente : %d ",cliente[i].tipo); printf(" \n numero carta conducao : %s ",cliente[i].carta_conducao); printf(" \n\n veiculo %d ",i+1); printf(" \n codigo do veiculo : %d ",cliente[i].veiculo.cod_vc); printf(" \n marca do veiculo : %s ",cliente[i].veiculo.marca); printf(" \n modelo do veiculo : %s ",cliente[i].veiculo.modelo); printf(" \n matricula do veiculo : %s ",cliente[i].veiculo.matricula); printf(" \n categoria do veiculo : %d ",cliente[i].veiculo.cod_categoria); printf(" \n quilometragem atual do veiculo : %.3f Km",cliente[i].veiculo.km); printf(" \n quantidade de combustivel no deposito : %.3f Litros",cliente[i].veiculo.qt_comb); printf(" \n estado do veiculo : %c ",cliente[i].veiculo.estado); printf(" \n\n contrato %d ",i+1); printf(" \n codigo do cliente : %d ",cliente[i].cod_cl); printf(" \n codigo do veiculo : %d ",cliente[i].veiculo.cod_vc); printf(" \n preco em euros por dia de aluguer : %.2f ",cliente[i].contrato.preco_dia); printf(" \n preco por km : %.2f ",cliente[i].contrato.preco_km); printf(" \n quilometros percorridos : %.3f ",cliente[i].contrato.qt_km); //printf(" \n data inicio de aluguer : %s ",cliente.contrato.data_ini); //printf(" \n data fim de aluguer : %s ",cliente.contrato.data_fim); printf(" \n escritorio veiculo alugado : %s ",cliente[i].contrato.escritorio_ini); printf(" \n escritorio veiculo devolvido: %s ",cliente[i].contrato.escritorio_fim); } printf(" \n prima qualquer tecla para continuar"); // se premido alguma tecla sai da funcao void mostrar_cliente(cliente_tipo *cliente, int qtd_clientes) getchar(); // le as teclas digitadas sai } int ler_quantidade_clientes() //pergunta quantos clientes pretende guardar e retorna esse numero {// le um numero positivo e inferior a MAX - 20 int qtd_clientes,i; do { printf("\n qual a quantidade maxima de clientes ( entre 1 e %d): ",MAX); scanf("%d",&qtd_clientes); }while (qtd_clientes<1 || qtd_clientes >MAX); return qtd_clientes; } // e) funcao procura e mostra todos os clientes com o nome indicado no vetor nome[10] void procurar_clientes(cliente_tipo cliente[], char nome[], int qtd_clientes) // cliente[] = *cliente { int i, flag=1; // 1 = verdadeiro (qualquer numero != 0 ) , 0= falso for(i=0;i<qtd_clientes && flag;i++) // se a flag tambem for verdadeira (!= 0) 1,2,3,4... { if(strcmp(cliente[i].nome,nome)==0) // compara duas strings, comeca por comparar o primeiro caracter de cada string se forem ambas iguais continua a percorer a string até chegar ao null ou até que algum par ( de strings)seja diferente // se retornar 0 as strings sao iguais, se for >0 o caracter diferente e maior na string1 (a.cidade) do que na string2 (cid) // se for <0 exactamente o contrario { printf(" \n\n cliente %d ",i+1); printf(" \n codigo cliente : %d ",cliente[i].cod_cl); printf(" \n nome cliente : %s ",cliente[i].nome); printf(" \n morada : %s ",cliente[i].morada); printf(" \n tipo de cliente : %d ",cliente[i].tipo); printf(" \n numero carta conducao : %s ",cliente[i].carta_conducao); printf(" \n\n veiculo %d ",i+1); printf(" \n codigo do veiculo : %d ",cliente[i].veiculo.cod_vc); printf(" \n marca do veiculo : %s ",cliente[i].veiculo.marca); printf(" \n modelo do veiculo : %s ",cliente[i].veiculo.modelo); printf(" \n matricula do veiculo : %s ",cliente[i].veiculo.matricula); printf(" \n categoria do veiculo : %d ",cliente[i].veiculo.cod_categoria); printf(" \n quilometragem atual do veiculo : %.3f Km",cliente[i].veiculo.km); printf(" \n quantidade de combustivel no deposito : %.3f Litros",cliente[i].veiculo.qt_comb); printf(" \n estado do veiculo : %c ",cliente[i].veiculo.estado); printf(" \n\n contrato %d ",i+1); printf(" \n codigo do cliente : %d ",cliente[i].cod_cl); printf(" \n codigo do veiculo : %d ",cliente[i].veiculo.cod_vc); printf(" \n preco em euros por dia de aluguer : %.2f ",cliente[i].contrato.preco_dia); printf(" \n preco por km : %.2f ",cliente[i].contrato.preco_km); printf(" \n quilometros percorridos : %.3f ",cliente[i].contrato.qt_km); //printf(" \n data inicio de aluguer : %s ",cliente.contrato.data_ini); //printf(" \n data fim de aluguer : %s ",cliente.contrato.data_fim); printf(" \n escritorio veiculo alugado : %s ",cliente[i].contrato.escritorio_ini); printf(" \n escritorio veiculo devolvido: %s ",cliente[i].contrato.escritorio_fim); flag=0; // é falso } } getchar(); } /* alterar clientes void alterar_cliente( cliente_tipo *cliente, int *qtd_clientes) { int i, esc; // esc - escolha da opção printf("\n qual o cliente que deseja alterar ?"); gets(cliente.nome); // equivalente a : scanf("%d",&(*cliente).nome); x-> igual a (*x). fflush(stdin); printf("\n qual o campo que deseja alterar 1- codigo cliente 2- nome 3- morada 4- tipo de cliente 5- carta conduçao?"); fflush(stdin); scanf("%d",&esc); // determina a escolha a efectuar switch(esc) { case'1': printf ("\n vai alterar o codigo do cliente"); gets(cliente.cod_cl); fflush(stdin); printf ("\n codigo do cliente alterado ! "); break; case'2': printf ("\n vai alterar o nome do cliente"); gets(cliente.nome); fflush(stdin); printf ("\n nome do cliente alterado ! "); break; case'3': printf ("\n vai alterar a morada do cliente"); gets(cliente.morada); fflush(stdin); printf ("\n morada do cliente alterada ! "); break; case'4': printf ("\n vai alterar o tipo de cliente"); gets(cliente.tipo); fflush(stdin); printf ("\n tipo de cliente alterado ! "); break; case'5': printf ("\n vai alterar o numero de carta conducao do cliente"); gets(cliente.carta_conducao); fflush(stdin); printf ("\n numero de carta de conducao alterada ! "); break; default : printf("\n nenhum dos campos foi alterado "); } } */ //eliminar clientes void eliminar_cliente(int pos,cliente_tipo *cliente, int *qtd_clientes) { int i; for (i=pos;i<=*qtd_clientes-1;i++) cliente[i]=cliente[i+1]; (*qtd_clientes)--; // retira um cliente } // menu de opções char formulario () // nao é void formulario (), mas sim char formulario () porque retorna os caracteres { char r; // o caracter digitado é guardado em r do { system ("cls"); // limpa o monitor, é um comando do windows (DOS cmd) , system ("cls"); == a system("dir"); , ou char s="cd bin" , system (cd); printf(" 1- Inserir clientes \n"); printf(" 2- Mostrar clientes \n"); printf(" 3- Procurar cliente por nome \n"); printf(" 4- Alterar cliente \n"); printf(" 5- Eliminar cliente \n"); printf(" s/S- Sair \n"); r=getchar(); // le o caracter digitado guarda como r e depois vai para a funcao }while (r!= 's' && r!= 'S' && r!= '1' && r!= '2' && r!= '3' && r!= '4' && r!= '5'); return r; } int main() // retorna um inteiro 0 é certo ? , 1 é errado ? { char ch, nome[30]; int qtd_clientes=0,i,pos,a; cliente_tipo cliente[MAX+1]; // cliente_tipo cliente; e não veiculo_tipo disciplina porque a estrutura veiculo está dentro da estrutura cliente, estrutura cliente é a principal ? do { ch=formulario(); switch(ch) { //preenche os vetores da estrutura cliente case '1' : { // retorna a quantidade de clientes a analisar qtd_clientes=ler_quantidade_clientes(); escrever_cliente(cliente,qtd_clientes); break; } // lista todos os clientes case'2' : { mostrar_cliente(cliente,qtd_clientes); //mostrar_cliente(cliente, qtd_clientes) break; } //procura o cliente pelo nome case '3': { printf("\n nome do cliente a procurar ?: "); gets(nome); procurar_clientes(cliente, nome, qtd_clientes); printf("\n prima qualquer tecla para continuar"); getchar(); break; } /* altera o cliente case '4': { alterar_cliente(cliente,qtd_clientes); printf(" \n cliente alterado !"); mostrar_cliente(cliente,qtd_clientes); printf("\n prima qualquer tecla para continuar"); getch(); break; } */ //elimina o cliente case '5': { printf("\n qual a posicao do cliente que quer eliminar ? <posicao 1 ate %d > ",qtd_clientes); scanf("%d",&pos); eliminar_cliente(pos,cliente,&qtd_clientes); printf("\n eliminou o cliente %d \n",pos); printf("\n tem os seguintes clientes registados"); mostrar_cliente(cliente,qtd_clientes); getchar(); break; } } }while(ch!='s' && ch!='S'); system("pause"); return 0; //diferença entre 0 e 1 ?? } P.S: eu alterei os getch() para getchar() para meu compilador poder compilar...
  15. Como é uma matriz tridimensional utilizamos 3 [], no caso: scanf("%d",&matriz[j][k]);
  16. 1freakday

    Exercícios em c

    No caso, temos que mostramos valores de acordo com a tabuada, usamos os 3 valores. %d %d %d int n; int multi; printf("Digite n: "); scanf("%i", &n); for(int i = 1; i <= n; i++){ multi = i * n; printf("%d x %d = %d\n",i,n, multi); } No 5, basicamente voce precisa otimiza-lo mesmo, como: #include <stdio.h> #include <conio.h> int main(){ int tamanho = 10; int n[tamanho], x = 0, xPares = 0, xImpares = 0; float media = 0.00, mediaGeral = 0.00, soma = 0.00, somaGeral = 0.00; for(int i = 0; i < tamanho; i++){ printf("Digite n "); scanf("%d", &n[i]); //Verificar se for um valor invalido ou 0 if(n[i] < 1){ if(!n[i]) break; printf("\nApenas numeros positivos!\n"); i -= 1; continue; } //Caso contrarior verificar as propriedades do valores else { //Media geral somaGeral += n[i]; //Pares if(n[i] % 2 == 0){ soma += n[i]; xPares++; }else xImpares++; x++; } } //Evita que o programa de 'crash' quando digitado 0 no inicio if(soma > 0) { mediaGeral = somaGeral/x; media = soma/xPares; printf("\nCalc Pares: %d\n", xPares); printf("Calc Impares: %d\n\n", xImpares); printf("Media Pares: %.2f\n", media); printf("Media Geral: %.2f\n", mediaGeral); } return 0; }
  17. 1freakday

    Programa em c

    @Ana Paula De Carvalho Silv Como o @Math.Pi disse, talvez seja necessário contar os anos bissextos, dependedo do exercicio, indiferente, nesse codigo postado, voce precisa contar os meses que tem 31 dias, a não ser que esteja utilizando um mes apenas com 30 dias.
  18. Segue a demonstração: #include <stdio.h> #include <stdlib.h> int primo(int n1,int n2, int vet[]); int main() { int num1,num2,i,c; printf("Num1:"); scanf("%d",&num1); printf("Num2:"); scanf("%d",&num2); //Vetor para receber o resultado //num1 > num2 ? num1-num2:num2-num1 é o mesmo calculo do dif = maior-menor; //ou if(num1 > num2) // result[num1-num2]; // else result[num2-num1]; //vai determinar o tamanho do vetor. int result[num1 > num2 ? num1-num2:num2-num1]; //Obter o vetor da funcao primo i = primo(num1,num2,result); //Mostrar o valor do vetor for(c = 0; c < i; c++) printf(" %d",result[c]); return EXIT_SUCCESS; } int primo(int n1,int n2, int vet[]){ int i,j,menor,maior,prim=0,x=0,dif; if(n1>n2){ menor=n2; maior=n1; } else{ menor=n1; maior=n2; } dif=maior-menor;//Saber tamanho maximo do vetor. for(i=menor;i<=maior;i++){ //Duas funções for para achar todos primos entre os dois numeros e guardar eles num vetor. for(j=1;j<=i;j++){ if(i%j==0){ prim++; } } if(prim<=2){ vet[x]=i; x++; prim=0; } prim=0; } //Retorna o tamanho do vetor return dif; }
  19. @Lucas532 Corrigi o ultimo post, foi mal.
  20. So um erro basico, como voce possui mais de uma estrutura, voce precisa determinar qual estrutura esta sendo acessada, o que nao ocorre a seguir: //Como esta dentro do loop eu adicionei o if(aluno.idade > mv) mv = aluno.idade; O certo seria: int ultimoMv = 0; //A variavel utilmomv armazena o local que vimos o irmão mais velho if(aluno[i].idade > mv){ mv = aluno[i].idade; ultimoMv = i; } //Como ja temos o local onde o mais velho esta, usamos do seguinte modo para mostrar seu nome: printf("O mais velho se chama : %s",aluno[ultimoMv].nome); Perdão, corrigi.
  21. Você não precisa utilizar diretamente o return para passar valores, já que ele é limitado e passa apenas valores únicos, mas você poderia passar um argumento e modificar a partir dele, assim ambas funções já poderão utiliza-lo, uma para modifica-lo outra para mostra-lo, ou vice-versa, nesse método você pode utilizar vetor de int que pode resolver seu problema em passar mais de um valor, exemplo: #include <stdio.h> #include <stdlib.h> void arrint(int vet[]){ register int c; for(c = 0; c<3; c++){ printf("Numero:"); scanf("%d",&vet[c]); } //como usei void(tipo da funcao) nao preciso usar return, ja estou modificando o endereco do vetor } int main(int argc, char *argv[]) { register int v = 0; int vetor[3]; //Passando o endereco para funcao modificar o vetor arrint(vetor); //Mostra valores for(v = 0; v < 3; v++) printf(" %d",vetor[v]); getchar(); return 0; }
  22. @Lucas532 Depende de qual metodo voce esta utilizando, esta usando um array de string ou array de strutct? manda o codigo se possivel.
  23. Para usar array de string você faria do seguinte modo: struct todos_dados_ { int idade[6], nota[6]; char nome[6][128]; // <---- array de seis nomes com 128 caracteres cada }; struct todos_dados_ aluno; Exemplo de programa: #include <stdio.h> #include <stdlib.h> struct todos_dados { int idade[6], nota[6]; char nome[6][128];//Array de string com 6 palavras de ate 128 caracteres }; struct todos_dados aluno;//Uma estrutura ja e suficiente int main() { int c = 0; printf("\n -- REGISTRO --\n"); for(;c < 6;c++){ printf("\nNome do aluno:"); scanf("%s",aluno.nome[c]);//Array de string printf("Idade do aluno:"); scanf("%d",&aluno.idade[c]); printf("Nota do aluno:"); scanf("%d",&aluno.nota[c]); } printf("\n -- LEITURA --\n"); for(c = 0;c < 6;c++){ printf("Nome do aluno:%s\n",aluno.nome[c]); printf("Idade do aluno:%d\n",aluno.idade[c]); printf("Nota do aluno:%d\n\n",aluno.nota[c]); } }
  24. Para copiar uma string você precisa utilizar a função strcpy, exemplo strcpy(aluno[0].nome,"Pedro Jose Jr"); P.S: no inicio do arquivo implemente #include <string.h>

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!