-
Posts
26 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por daniel.oliveira
-
-
Na verda é ao contrário ao alocar memória ele te retorna um endereço na memória pronta pra usar no programa, faria mais sentido:
fastCar = &c;
- 1
-
main(){ struct FastCar *fastCar; //inicia fastCar que aponta aleatoriamente ... if(x == 1){ Cadastro(&fastCar); //chama função Cadastro ... void Cadastro(struct FastCar **fastCar){ // ponteiro pra ponteiro? struct FastCar *c; //inicia c que aponta aleatoriamente c = (struct FastCar*)malloc(sizeof(struct FastCar)); //c aponta para memória inicializada c = &fastCar[0]; // c aponta para o que fastCar está apontando - aleatoriamente por que você declarou em main
-
Eu dei uma breve olhada no seu código e vi que tem erros básico de operação com ponteiros e alocação de memória. Na função de cadastrar você aloca uma memória e endereça para o ponteiro c e na próxima linha você endereça a struct parametro para c (ou seja você perde a alocação que você fez), além de endereçar uma varável que nem foi iniciada em main. Eu sugiro estudar novamente sobre operações de ponteiros e struct.
- 1
-
7 minutos atrás, AnsiC disse:
Tem um elemento em particular que passou e não foi visto: A virgula!!!!
Fraçoes são representadas com ponto.
Exo.: 12,5 em C se escreve 12.5
Isso mesmo, depois de programar vários programas você pega o jeito de como digitar literalmente os tipos de dados em C.
- 1
-
Vamos a lógica
Se a>b , então: a-b
Se a<b, então: a+b
Senão (se não maior, nem menor é igual), então a*a, ou a*b, tanto faz.
você pode testar em C
if (a>b){ //printa a-b } else if (a<b){ //printa a+b } else { //printa a*b }
Para mostrar você não precisa gravar numa variavel só se você for utilizar depois
printf("A diferença entre a e b, %d - %d = %d", a, b, a-b);
-
A biblioteca padrão de entrada e saída de arquivo permite que você leia e escreva arquivos e, porém você tem que ter um pouco de conhecimento sobre ponteiros, e as funções de leitura e escrita, tais como FILE *arquivo, fopen(), fscanf(), fprintf()., etc...
Bom você pode pesquisar leitura e e escrita de arquivos em C no Google, montar um código e se precisar de ajuda voltar a nos perguntar.
- 1
-
O último Else está codificado errado, você pode colocar um Else If com a condição maior que 25 como você fez tirando os dois pontos depois da comparação.
Agora você pode também só colocar Else, já que o IMC não é menor que 18,0, e não é menor que 25,0 só pode ser maior do 25,0. Só colocar Else e o código a ser executado.
- 2
-
Eu não queria causar polêmica, mas programação é isso mesmo existe diversas formas de resolver um determinado problema, e todas alternativas estão certa. Mas sempre penso em reutilização de código e professores ensinam isso, por exemplo ao setar um valor como limite, você ao usar seu programa para números maiores terá que reescrever a linha de código para suportar tal limite, isso é simples em um programa de 100 linhas de código, agora imagine ter 50 mil linhas? Os criadores de C fizeram uma biblioteca padrão de limites até porque o limite de um int varia de computador para computador, de sistema para sistema. Então eu formulei minha resposta sendo que solucionando a questão assim eu não precisarei de mudar meu algoritmo futuramente, ele rodará até sei lá num computador pré histórico onde o valor máximo de um int seja maior que 99999.
- 1
- 1
-
E se alguém digitar um numero maior? já que o programa não testa, o primeiro valor é o menor e contador começa com um.
você digita um valor e logo ele é o maior, menor e média, matemática básica.
- 2
-
É simples resolver esse questão, o primeiro número digitado é o menor número, faça antes do loop. Depois dentro do loop você terá duas situações ao ler um valor:
O valor será igual a ao menor número, incremente contador++.
Valor será menor ao menor número, ou seja temos um novo menor número, contador = 1.
Implemente esse algoritmo e poste os resultados obtidos.
- 2
-
Editores de texto em geral não ocupam muito espaço, o que ocupa é se for uma IDE já que o mesmo pode possuir compiladores, builders, ferramentas de depuração, ambiente de design de um, etc. Um ótimo editor que uso é o sublime.
-
@isrnick Verdade foi um erro meu já que strings em C são ponteiros eu pensei que como eles são alocados dinamicamente faria alguma diferença na memória. Mas fgets() não dá nem a mínima pra isso e pede um vetor de caracteres fixo alocando memória desnecessária.
-
@isrnick Eu acho sua solução muito boa e limpa, é o que eu faria, mas para facilitar o alto consumo de memória a busca só precisaria guardar o nome é CPF em primeira vez e se o CPF for igual aí sim guardar os demais dados do cadastro isso economizaria mais memória, no caso que eu apresentei o programa não gravaria nada e quando achasse o CPF voltaria uma linha e aí ele faria o que bem entender já que estaria no começo do cadastro economizando mais memória. A questão de como formatar os dados é decisão do programador bem como escolher que tipo de dados usar. Para iniciantes eu aconselho trabalhar com arquivo binários, mas isso é outra história.
-
-
existe uma função chamada fgetpos e fsetpos ela te ajuda a ir a uma posição específica em uma arquivo, o correto é você setar uma posição antes de chamar fgets já que ele avança uma linha inteira por vez, depois é só usar fsetpos e você voltará na posição desejada no caso uma linha anterior a do cpf e colocar numa string tudo que vier após o ": " ou '#'.
Meu diagrama de exemplo
FILE *txtFile; fpos_t p; //posição para ser gravada //Funções para abertura de arquivos... fgetpos (txtFile, &position); //grava a posição da linha em negrito
Nome: Marcos Belino
CPF: 123.456.789-10
Data de Nascimento: 123456
Numero Do Cliente: #8sua_funcao_de_pesquisa() //retorna falso já que não há nenhum CPF
fgets pula a linha então estará assim a seu arquivo:
Nome: Marcos Belino
CPF: 123.456.789-10
Data de Nascimento: 123456
Numero Do Cliente: #8sua_funcao_de_pesquisa() //retorna verdadeiro se o CPF estiver correto
Então você volta para a linha anterior
fsetpos (txtFile, &p);
E ficará ssim novamente e aí é só retirar toda a string após ": " ou '#'
Nome: Marcos Belino
CPF: 123.456.789-10
Data de Nascimento: 123456
Numero Do Cliente: #8claro que são só dicas, mas esclarece bastante coisa se estiver com dúvidas é só perguntar.
- 1
-
@Boko Moko Isso mesmo, sabemos que temos funções em C de leitura de arquivo usam dois tipos de caracteres de demarcação " " e "\n" então a questão está em como você formata seus dados no arquivo TXT. Mais tarde eu procuro exemplos práticos.
- 1
-
Como está o cadastro do cliente no arquivo de texto? A forma de como você colocou vai deixar mais claro como te ajudar.
- 1
-
Como sua professora pediu para ler um número negativo e você pode um usar um if para não ocorrer uma entrada de número negativo indevido
if(n < 0) { printf("Entrada de número negativo indevido!\n"); return; //Encerra programa }
-
seu pseudocódigo é:
se (numFaltas >= 0 E numFaltas <= 8) aprovado senão se (numFaltas > 8 E numFaltas <=18 ) reprovado senão mensagem de erro
Agora é só transformar em C...
usa-se if para testar uma condição
if(condição)
se você quiser testar duas condições e as duas tem que estarem corretas use &&
if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!);
pode usar também o else para o caso de a condição testada seja falsa
if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!); else printf("Seja bem vindo!");
você pode usar o else com if para testar uma nova condição caso a condição anterior seja falsa
if(idade < 18 && estaSemPai == true) printf("Não pode entrar!!!); else if (eVIP == true) printf("Seja bem vindo sr. %s", nome); else printf("Seja bem vindo!");
-
Só corrigindo seu programa foi escrito em C e não C++.
-
2 horas atrás, Mayk.hsm disse:
Obrigado, tentei entender seu codigo por um bom tempo, mas não consegui compreender ainda. Vou estudar alguns conceitos que eu não sei, e tentar compreender durante a semana. Mas valeu pela colaboração.
Criei um if , acho que resolve o problema do plural, apesar de eu não saber se é o jeito mais efetivo. Revendo e aprendendo. valeu
if(PALAVRA[j]==FRASE[aux_i])//faz contagem da sequencia, para fazer comparação com tamanho { x++; } if((FRASE[T_PALAVRA+i]=='s')&&(PALAVRA[T_PALAVRA-1]!='s'))//esse ultimo if que trata dos plurais x--; ...
Eu só queria demonstrar que tais trechos de código você pode transformar em função para além de dividir a tarefa de contruir um programa lhe dará a vantagem de reutilizar o código uma vez criada a função você poderá modificá-la sem alterar o resto do programa.
-
Tente armazenar os tipos de dados na forma primitiva individualmente int ou char* no arquivo e dará certo.
-
você pode criar uma função que compara dois array de caracter e retorne 0 se forem iguas(bem parecida com strcmp que compara strings), seria mais ou menos assim:
#include <stdio.h> #include <string.h> int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[]) { int tam = strlen(str); //compara caractere por caractere for(int i = 0; i < tam; i++) // se achar um caractere diferente retorna -1 if(str[i] != arrayChar[i]) return -1; // retorna 0 por serem iguais return 0; }
Você então pode utilizar em um loop e sempre que você achar a primeira letra igual você chama a função
exemplo:
#include <stdio.h> #include <string.h> typedef char* string; // eu não lembrei qual blibbioteca linkar então definir aqui /** * Esta função compara uma string com um array de caracteres(char []) * retorna 0 se iguais ou -1 para diferentes */ int compStrCChar(string str, char arrayChar[]); int main(void) { string palavra = "teste"; string frase = "12teste12test12testeteste"; int qtPalavras = 0;// quantidade de palavras int tam = strlen(frase); //int comp; // armazena comparação // busca a palavra dentro da frase e então acrescenta 1 a qtPalavra for(int i = 0; i < tam; i++) { if(palavra[0] == frase[i]) { // se as palavras forem iguais ou seja igual compStrCChar a 0 //comp = compStrCChar(palavra, &frase[i]); if(compStrCChar(palavra, &frase[i]) == 0) // lembrando a string definida pelo usuario primeiro qtPalavras++; } } printf("%i\n", qtPalavras); } int compStrCChar(string str, char arrayChar[]) // compStrCChar (compara String com char[]) { int tam = strlen(str); //compara caractere por caractere for(int i = 0; i < tam; i++) // se achar um caractere diferente retorna -1 if(str[i] != arrayChar[i]) return -1; // retorna 0 por serem iguais return 0; }
- 2
-
Aqui está o pseudocódigo para o enunciado:
1. Obter largura e comprimento do terreno
2. Obter largura e comprimento dos andares
3. Se largura e comprimento dos andares forem menor que o terreno repetir passo 2
4. Obter quantidade de andares
5. Calcular as dimensões e mostar resultado
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
Programa que faça as medias
em C/C#/C++
Postado