Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

  1. se vetor for um objeto reservado dinamicamente você sim pode liberar, caso contrario n. Para ficar mais claro você poderia passar o enunciado completo.
  2. Claro... Qual sua duvida? Ja tem algo feito...? Posta ai o que levar feito. Em um principio n tem nada demais, é só carregar tudo na memória desde o tal arquivo, fazer as operações e quando sair do programa sobrescrever tudo no arquivo.
  3. é... mas si a coisa escalar você vai desejar ter usado structs e arrays de structs XDD
  4. então... struct{ char nome[100]; char diretor[x][100]; }; logo um array. mas si diz que n sabe sobre arrays de structs melhor esquecer mesmo
  5. o modo mais fácil é carregar tudo na memória em um vetor de structs, organizar e escrever tudo no arquivo. mas cada professor é um mundo.
  6. exatamente.. por muito que programe em 2d internamente sao triangulos e texturas
  7. E se em vez disso você n tenta fazer... vai que fica melhor.
  8. Na verdade para tema de jogos o mais provável é que você n encontre um post 100% adaptado ao seu problema, vai precisar ir pegando peças com pinça e ir adaptando a seu problema. Se alguém daqui souber fazer isso certamente será porque trabalha com isso.
  9. tem que ter vários tutoriais pela net. Uma "googleada" rápida e saiu isso -> https://www.cs.bham.ac.uk/~jxb/e aí/w9g.pdf busca algo como "chess IA algoritm in C" en github, ou algum tutorial em pdf etc.
  10. #include <stdio.h> #include <string.h> int main(){ static int op = 0; printf("1 continuar \n2 sair"); scanf("%d", &op); switch(op){ case 1: main(); break; case 2: return 1; } return 0; }
  11. acho que sim XD mas como ja n me deixa retificar depois do seu comentário vai ficar assim mesmo hehe
  12. não da certo usar strlen depois de passar uma string por "parâmetro" quando em realidade o que o programa passa é um ponteiro de forma não transparente ao usuário. Me explico... Quando você passar uma string assim: #include <stdio.h> void foo( char str[100] ) { printf("foo->%s\n", str); } int main(){ char frase[100] = {"Ola mundo!"}; printf("main->%s\n", frase); foo(frase); return 0; } Você deve estar achando que é passado uma "copia" de frase que esta em main para a str que esta em foo, mas de fato não é assim, o que esta acontecendo é que você esta passando um ponteiro e por isso strlen n vai funcionar, não vai funcionar porque strlen precisa da string e não de um ponteiro a string. Para verificar si o que digo é verdade basta com imprimir as direções de memória da primeira casinha da string desta forma tanto em main quanto na função...: #include <stdio.h> void foo( char str[100] ) { printf("foo->%s\n", str); printf("foo->%p\n", &str[0]); } int main(){ char frase[100] = {"Ola mundo!"}; printf("main->%s\n", frase); printf("main->%p\n", &frase[0]); foo(frase); return 0; } Você vai poder conferir que as direções são as mesmas, o que isso indica que o que foi passado não é uma copia e sim um ponteiro. Ou seja... não foram passados todos os bytes e sim a direção onde começa a string em main. Por que acontece isso? Em C passar copias tem um custe, esse custe é tempo e espaço em ram, não é o mesmo passar um ponteiro que uma "tripa" de bytes por dar um exemplo, que em alguns casos pode chegar a ser bem grandinha XDD. Solução? Passar a direção... e isso é o que o compilador faz, assumindo que isso você é consciente disso, porém si ignorar isso vai dar erros. O que acontece é que de forma não transparente o que é passado é um ponteiro e essa é a causa de seu programa n funcionar quando você chama strlen dentro da função, porque passar copias são custosas tanto em tempo como em memoria. O que pode ser feito é realizar todo o processo de forma manual, contando byte a byte até chegar no \0 que indica o fim da string, ou algo como isso: #include <stdio.h> #include <string.h> void foo( char str[100] ) { char aux[100]; strcpy(aux, str); printf("%lld", strlen(aux)); } int main(){ char frase[100] = {"Ola mundo!"}; printf("main->%s\n", frase); foo(frase); return 0; } Neste caso é reservado uma copia local dentro da função foo e então sim ja funciona, porém com tudo isso anulamos o mecanismo que faz com que seu programa seja eficiente já que todo o tempo será feito copias, e dependendo do tamanho da string seu programa será menos eficiente. Menos eficiente porque vai levar mais tempo em realizar essas copias, e seu programa usará mais RAM do que o necessário para funcionar. você também pode passar o tamanho pelos parâmetros dentro do main, mas ai deixo a seu critério.

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