
Dan Oliveira
Membros-
Total de itens
95 -
Registro em
-
Última visita
Sobre Dan Oliveira

- Data de Nascimento 05/08/1994
Contatos
-
MSN
daniel_skippers@hotmail.com
-
Skype
dani0liveira
Perfil
-
Gender
Male
-
Location
Cariacica, ES
Últimos Visitantes
1.740 visualizações
Dan Oliveira's Achievements
0
Reputação
-
(Resolvido) PROBLEMA COM PASSAGEM DE PONTEIROS PARA FUNÇÃO
pergunta respondeu ao Luis Paulo Silva Pereira de Dan Oliveira em C, C++
Eu não dei uma olhada na lógica, mas quando você quer criar um vetor com um tamanho definido pelo usado em tempo de execução você vai usar alocação de memória. "Mas o que é isso?" Quando você escreve um programa você tem que especificar tipos, retorno de função, loops... Tudo isso precisa de ter um endereço da memória e um espaço para ser guardado, ou seja seu programa já diz quanto de memória vai precisar para o sistema e ele vai dar. Quando ele for executado ele poderá alterar os valores na memória que foi permitido e previamente declarada. Para usar alguma memória durante o tempo de execução do programa(quando ele está rodando) o sistema oferece um espaço para os programas em que eles possam alocar (alugar) tais blocos de memória. "E o por quê disso?" Por mera segurança, se um sistema deixasse o programa ter total controle sobre a memória RAM ele poderia reescrever a memória usada pelo próprio sistema e assim conseguiria fazer qualquer coisa com ele, tipo roubar senha. Você pode pesquisar um pouco como os programas realmente são executados. Vamos a prática. A linguagem C oferece uma biblioteca padrão para alocação de memória sujo o arquivo de cabeçalho é stdlib.h. Existe três funções relacionadas a alocação de memória. void* malloc(size_t size) //aloca um bloco tamanho size na memória void free(void* ptr) //libera a memória apontada por ptr void* realloc(void* ptr, size_t size) //realoca um bloco já alocado O que você tem que saber: size_t é unsigned int, ou seja não aceita valores negativos então teste para ver se o usuário digita algo entre zero e o maior valor aceito por size_t void* é o retorno das funções de alocação, ou seja quando você for converter para qualquer tipo você precisa fazer um casting (conversão) o retorno da função malloc será NULL se ela não conseguir alocar eespaço. se eu quiser alocar um int faço o seguinte declaro um ponteiro para int int* ptr; e aloco a memória fazendo uma conversão da memória para um int (int) ptr = (int) malloc(sizeof(int)); //o operador sizeof() especifica quantos bytes(2 ou 4 na maioria) preciso para representar um int if(ptr = NULL) //não foi alocado a memoria return 1; //retorna um valor com o código esse um é arbitrário toda vez que o programa retornar ele eu sei q foi problema com a memória ptr = (int* ) realloc(ptr, 4 * sizeof(int)); //Aqui você realoca a memóriia para suportar um vetor de 4 ints, convertendo então o ponteiro para suportar tal dado free() é uma função que libera a memeória alocada pelo ponteiro ou seja free(ptr); //libera a memória que tinha alocado antes serve para grande programa, às vezes precisamos de um espaço para determinda tarefa, ou função e como a alocação é válida até quando nosso programa é encerrado temos que liberar o espaço quando não precisamos dele #include <stdio.h> #include <stdlib.h> int* fibo (int n); int main (void) { int n1; int *f; printf ("Digite um numero: "); scanf ("%d", &n1); f = fibo (n1); if(f == NULL) { printf("Falha ao alocar memória\n"); return 1; //programa finalizado com erro } for (int i=0; i<n1; i++) printf ("%d ", f[i]); free(f); //libera espaço da memória return 0; } int* fibo (int n) { int n1 = 0; int n2 = 1; int* f; //ponteiro para um vetor int, equivale a int f[], só que da maneira correta f = (int* )malloc(n * sizeof(int)); //aqui a um casting dizendo que é um vetor de int if (f == NULL) //se a alocação deu errada return NULL; f[0] = n1; f[1] = n2; for (int i = 2; i <= n; i++) { f[i] = n1 + n2; n1 = n2; n2 = f[i]; } return (f); } Tem outras boas práticas também a ser seguidas, consulte cplusplus.com/reference para saber mais. Lembrando não analisei sua lógica, só expliquei como trabalhar com alocação, dúvidas fique a vontade para pergunta todos estarão à disposição -
Você cria um vetor de caracteres char string[20]; Depois para acessar uma posição na string é só usar um indicador n. Por exemplo: Para acessar n posição da string. string[n]; você pode usar isto para excluir. Outra opção e levando em conta que você tenha noção sobre ponteiros. Você teria que criar uma string com alocação de memória dinamica para aceitar qualquer tamanho de string e uma função que exclui um caractere de string trazendo todos caracteres da direita uma posição a esquerda e ir liberando espaço, na verdade isso funciona com arrays em C também. por exemplo: 0 1 2 3 4 5 6 D A N I E L \0 //O usuario exclui N 0 1 2 3 4 5 6 D A N I E L \0 //É só usar um loop para copiar os caracteres da direita para esquerda 0 1 2 3 4 5 D A I E L \0
-
usa o tipo long long
- 2 respostas
-
- número muito grande
- problema com variavel
- (e %d mais)
-
Sempre que você estiver diante de um problema que precisa de uma estrutura de dados em C você utiliza uma struct struct filme{ int codigo; char[20] titulo; int res; //uma variavel para testar se estar reservado } O que você tem a fazer é sempre que um usuário for reservar um filme voce checar essa variavel. Quando for 0 o filme não está reservado Quando for 1 o filme já está reservado E por ultimo se lembre de zerar a variavel ao começar o programa é bom sempre atribuir o numero 0 a res senão seu programa estará coletando uma valor qualquer na memória.
-
Como demonstrar como foi feita uma operação de soma em C ?
pergunta respondeu ao kymera010102 de Dan Oliveira em C, C++
printf("\nA soma de %d com %d: %d", x, y, x+y); -
if (pass == 123); //Esse ponto e virgula indica que o if acaba aqui. Logo o que estiver abaixo entre chaves {} sempre será executado e o else fica sem um if anterior
-
Organização de string em arquivo de ordem alfabética.
pergunta respondeu ao luishng de Dan Oliveira em C, C++
Você pode usar a função fgets() para ler uma string do arquivo: Sua compoisção é: char *fgets(char *minhaString, int numBytes, FILE *arq) Onde minhaString é a string que recebe o valor; int numBytes o numeros de bites a ser lido do arquivo; FILE *arq - um ponteiro para o arquivo aberto; Essa função lê uma string até ter lido numBytes caracteres ou encontrado o caractere '\n' Você pode criar um vetor com 100 nomes de 80 caracteres limites cada char nomes[100][80]; e depois pode lê o arquivo e coloca em cada indice do vetor char nome[100][80] int i = 0; while(!feof(p_arquivo) || i <100) { fgets(nome[i],sizeof(char[80]), p_arquivo); } -
Organização de string em arquivo de ordem alfabética.
pergunta respondeu ao luishng de Dan Oliveira em C, C++
Leia o arquivo inteiro e guarde em um vetor de strings; Depois use um algoritmo de ordenação (bubblesort, quicksort, ...) Para ajudar você poderia usar a função strcmp() do header string.h int strcmp(char* string1, char* string2) Ela retorna 1 se string1 for maior que string2 Ela retorna -1 se string2 for maior que string1 Ela retorna 0 se string1 for igual a string2 Lembrando que todo caractere(char) é um inteiro(int) e é na tabela ascii 'a' terá um valor menor que 'z' Ou seja: strcmp("a", "b") retorna -1 strcmp("b", "a") retorna 1 strcmp("a", "a") retorna 0 -
Eu programo em C mas como deu pra perceber a sintaxe do cout está errada. ele não é uma função e logo não exista os parenteses para passar argumentos. o resultado esperado é obtido por: cout<<num1<<"e divisel por: "<<num2<<endl;
-
A declaração está certa, (colocaria char num[] como parâmetro pois C não sabe dimensões de uma string). posta a sua função completa para sabermos o que está errado.
-
Eu não entendi seu programa ou o que ele faz. Por favor poste o enunciado ou explique o que ele precisa fazer para ajudarmos.
-
é só mudar o printf e aproveitar o laço para mostrar... #include <stdio.h> int main(void){ int vezes, i, aux, total; total =0; //Pede ao usuario um int para vezes printf("Digite o numero de vezes a ser somado: "); scanf(" %d", &vezes); //itera i até n vezes for(i =0; i <vezes; i++){ //pede um numero ao usuario usando aux; printf("Num%d: ", i + 1); scanf(" %d", &aux); //é só pra isso que serve aux total += aux; //soma o valor de aux a total e atribui a total } printf("O resultado total foi: %d\n", total); return 0; }
-
aux ou (variavel auxiliar) é só uma variavel a mais para ajudar no processo do algoritmo. iterar é um termo usado para o acréscimo de uma varavel, usada em um loop. algumas partes que eu deixei de implementar erá só colocar alguns scanfs taí o código #include <stdio.h> int main(void){ int vezes, i, aux, total; total =0; //Pede ao usuario um int para vezes printf("Digite o numero de vezes a ser somado: "); scanf(" %d", &vezes); //itera i até n vezes for(i =0; i <vezes; i++){ //pede um numero ao usuario usando aux; printf("Digite um inteiro: "); scanf(" %d", &aux); //é só pra isso que serve aux total += aux; //soma o valor de aux a total e atribui a total } printf("O resultado total foi: %d\n", total); return 0; }
-
Peça um numero ao usuario e itere em um laço o enquanto i menor que o numero de vezes. Use uma variavelauxiliar e acrescente ao total em cada iteração ... int vezes, i, aux, total; total =0; ...Peça ao usuario um int para vezes for(i =0; i <vezes; i++){ ...peça um numero ao usuario usando aux; total += aux; //soma o valor de aux a total e atribui a total } ...imprime na tea o valor de total é um código imcopleto, pois não vou fazer seu dever de casa. Qualquer dúvida, poste um código que ficaremos feliz em te ajudar.
-
Encontre os 2 maiores num. inteiros (Iniciante)
pergunta respondeu ao guisaulo de Dan Oliveira em C, C++
Temos um tópico sobre o mesmo tema Dúvida em linguagem C