Ir para conteúdo
Fórum Script Brasil

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.653 visualizações

Dan Oliveira's Achievements

0

Reputação

  1. 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
  2. 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
  3. 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.
  4. 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
  5. 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); }
  6. 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
  7. 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;
  8. 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.
  9. 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.
  10. é 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; }
  11. 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; }
  12. 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.
  13. Temos um tópico sobre o mesmo tema Dúvida em linguagem C
×
×
  • Criar Novo...