Ir ao conteúdo
  • Cadastre-se

isrnick

Membro Pleno
  • Posts

    1.550
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de isrnick em É Possível Fazer Um Script .Bat Para Saber Em Que Dia Semanal Estamos? foi marcado como solução   
    Com uma rápida busca no google achei isso como solução:
    for /f "skip=1" %%a in ('wmic path win32_localtime get dayofweek') do @echo %%a  
  2. O post de isrnick em Linguagem C - Uma palavra é palíndroma foi marcado como solução   
    strcpy(inversa, palavra); //Desnecessário: Não há necessidade de fazer cópia exata da palavra  
    Mude:
    tam = strlen(inversa); Para:
    tam = strlen(palavra);  
     
    No ciclo for mude:
    printf("%c",inversa[x]); Para:
    inversa[x] = palavra[tam-x-1];  
     
    E não esqueça de colocar o caractere nulo no fim da string (fora do ciclo for):
    inversa[tam] = '\0';  
  3. O post de isrnick em Programa não lê o valor char foi marcado como solução   
    Mude:
        scanf("%c",&sexo); Para:
        scanf(" %c",&sexo); Ou seja, incluindo o espaço antes do %c no scanf, para descartar o caractere nova linha '\n' (e qualquer outro caractere vazio como espaço, tabulação, etc, que tiver) que ficou sobrando do scanf anterior (o caractere é adicionado à entrada quando você aperta Enter no terminal/cmd), assim o %c no scanf não vai mais ler esse caractere nova linha como a entrada digitada pelo usuário.
  4. O post de isrnick em Diferenciar int de char no printf foi marcado como solução   
    Então a solução que postei não funciona pois os números podem ter mais de 1 dígito.
     
    Mas você tem um problema maior, não há como diferenciar pois caracteres são números, ou seja o caractere 'A' na verdade é o número 65 (consulte a tabela ASCII para ver números correspondentes de cada caractere).
     
    Seria necessário usar uma struct com uma flag para indicar se é para tratar como int ou char...
    #include <stdio.h> typedef struct intorchar{ int i; char ischar; } intc; int main() { intc M[20][20]; M[0][0].i = 'A'; M[0][0].ischar = 1; M[0][1] = (intc){'B', 1}; M[0][2].i = 10; M[0][2].ischar = 0; M[0][3] = (intc){20, 0}; M[0][0].ischar ? printf("%c\n", M[0][0].i) : printf("%d\n", M[0][0].i); M[0][1].ischar ? printf("%c\n", M[0][1].i) : printf("%d\n", M[0][1].i); M[0][2].ischar ? printf("%c\n", M[0][2].i) : printf("%d\n", M[0][2].i); M[0][3].ischar ? printf("%c\n", M[0][3].i) : printf("%d\n", M[0][3].i); return 0; }  
  5. O post de isrnick em Sem resposta no Programa foi marcado como solução   
    Com o código indentado corretamente fica mais fácil de ver onde está o erro.
    O problema é que estava faltando o else para dizer que o com mês menor ou igual a 0 ou maior que 12, ou ano menor ou igual a 0 a data não é válida.
    #include <stdio.h> #include <stdlib.h> int main() { int dia, mes, ano; printf("*VERIFICACAO DE DATA VALIDA* \n"); printf("\n"); printf("DIGITE UM DIA: "); scanf("%d", &dia); printf("DIGITE UM MES: "); scanf("%d", &mes); printf("DIGITE UM ANO: "); scanf("%d", &ano); if(mes>0&&mes<=12 && ano>0){ if((mes==2) && (dia>0&&dia<=28 &&)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else if((mes==4||mes==6||mes==9||mes==1) && (dia>0 && dia<=30)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else if((mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) && (dia>0 && dia<=31)){ printf("%d/%d/%d EH VALIDA", dia, mes, ano); } else{ printf("%d/%d/%d NAO EH VALIDA", dia, mes, ano); } } else{ //<---Faltava esse else aqui printf("%d/%d/%d NAO EH VALIDA", dia, mes, ano); } return 0; }  
    Ainda está faltando considerar os anos bissextos, quando fevereiro tem 29 dias.
  6. O post de isrnick em Por que não esta gerando o resultado esperado foi marcado como solução   
    Coloque um espaço antes do % nos scanfs com %s, para descartar caractere o '\n' (nova linha) e qualquer outro caractere de espaço vazio (espaço, tabulação, etc) que tiver sobrado dos scanfs anteriores na entrada padrão (stdin).
     
    E para vetores (como nesses 2 vetores de char do seu programa) não vai & antes do nome do vetor, pois usando o nome diretamente já obtém um endereço de memória.
     
    Ex:
    scanf(" %s", endereco);  
  7. O post de isrnick em / Não identifica o comando (bash: f: command not found ) foi marcado como solução   
    Coloque um espaço antes do %c para descartar o caractere '\n' que ficou sobrando do scanf anterior na entrada padrão (stdin):
    scanf(" %c", &le );  
  8. O post de isrnick em lista estática criar uma função foi marcado como solução   
    Dá sim, o @AdrianoSiqueira até fez um exemplo no programa dele:
     
     
    Minha função alterada ficaria assim:
    #include <string.h> /*...*/ int insere_no_fim_da_lista(struct lista *li, struct aluno *al){ if (!lista_cheia(li)){ li->lAlunos[li->qtde] = *al; li->qtde++; return -1; } else { return 0; } } E chamaria a função assim:
    struct aluno al; al.matricula = 53563; strcpy(al.nome, "Joao Santos"); insere_no_fim_da_lista(li, &al); //Ou Assim: al = (struct aluno){.matricula=65464, .nome="Maria Silva"}; insere_no_fim_da_lista(li, &al); //Ou Então assim: insere_no_fim_da_lista(li, &(struct aluno){.matricula=15436, .nome="Jose Souza"});  
    adicionado 32 minutos depois @arfneto O conceito de lista é genérico, não há regra de como deve ser implementado, é possível fazer uma lista com todas as funcionalidades conceituais da estrutura de dados usando um vetor comum, claro essa implementação ficaria longe do ideal com sérios impactos de desempenho quando forem feitas inserções ou remoções que não esteja no fim da lista, devido a necessidade de copiar vários nós da lista toda vez que isso acontecer, mas ainda assim atenderia a definição de uma lista.
     
    Mas concordo que se o intuito era introduzir a estrutura de dados Lista seria melhor utilizar um código adequado para não confundir o aluno. E se esse é o caso o professor cometeu uma grave falha.
     
    Entretanto a lista neste exercício me parece apenas se referir ao termo lista de chamada relacionada a uma classe de aula, e é mais um exercício de linguagem de programação do que de estrutura de dados. E embora essa lista de chamada pudesse ser melhor modelada utilizando a estrutura de dados lista, um vetor é adequado suficiente visto a pequena quantidade de alunos, e não há requisitos fortes de inserção intermediária ou remoção de alunos frequentes, de fato isso aconteceria só excepcionalmente.
  9. O post de isrnick em Função com recursividade e quadrado perfeito foi marcado como solução   
    void quadros_inv(int n){ if(n > 1){ printf("%d, ", n*n); quadros_inv(n-1); } else { printf("1"); } } Assim imprimiria os quadrados perfeitos até n² em ordem decrescente, mas o enunciado falou que a função "devolve a lista", então acho que a intenção era retornar a lista ao invés de imprimir dentro da função... O que aumenta a complexidade do problema.
     
    Pelo fato de usar o termo 'lista' no enunciado, e não arranjo ou vetor, e a saída estar com colchetes [ ], me faz pensar que esse exercício originalmente foi proposto para Python e não C ou C++, aí sim faria mais sentido "devolver uma lista".
     
    (Sim, buscando online até achei numa lista exercícios de Python, o exercício 9 nesse link: https://www.math.tecnico.ulisboa.pt/~ccal/python/ex02.html )
  10. O post de isrnick em Pegar Informação a parti da segunda linha do documento. foi marcado como solução   
    Por causa do modo como você fez seu programa isso é uma pergunta sobre linux não de linguagem C.
     
    Você está usando a função system() para executar o programa cat do linux para concatenar os arquivos, mas para pular linha você poderia mudar para o programa tail com parâmetro -qn +2 para pular para a segunda linha de cada arquivo.
     
    Por exemplo:
    tail -qn +2 arquivo1.csv aquivo2.csv arquivo3.csv > saida.csv Vai concatenar os 3 arquivos na saída sempre começando a partir da segunda linha.
     
    https://superuser.com/questions/62970/unix-cat-starting-from-line
     
    Note que isto faria com que não tenha nenhum cabeçalho na saída, nem mesmo o primeiro cabeçalho. Então se fizer assim terá que fazer algo a mais se quiser colocar o cabeçalho no começo do arquivo.
  11. O post de isrnick em Movendo arquivos de uma Pasta foi marcado como solução   
    Seria algo assim depois do "system(comandoJuntarArqs);" :
    rewind(arq_ent); while (fgets(registro, 400, arq_ent) != NULL) //Ler todos os arquivos de dentro do arquivo que o programa criou. { strcpy(registroAux, "/caminho/da/pasta/de/backup/"); strcat(registroAux, registro); rename(registro, registroAux); } Assumindo que eu esteja entendendo corretamente o seu código e a organização dos arquivos.
  12. O post de isrnick em data e hora no Arquivo foi marcado como solução   
    Primeiro, coloque a declaração das variáveis no começo junto com as outras declarações de variáveis:
    char nomeArquivo[100]; size_t comprimentoVetor = 100; time_t agora; (Também não se esqueça de incluir as bibliotecas necessárias: time.h e stdlib.h .)
     
    E para ficar claro, era para tirar o printf do meu código, e substituir o vetor nomeArquivo no strcat do seu programa para concatenar o nome do arquivo com data, no comandoJuntarArqs:
    agora = time(NULL); strftime(nomeArquivo, comprimentoVetor, " > ArqsJuntosData%FHora%Hh%Mm%Ss.csv", localtime(&agora)); strcat(comandoJuntarArqs, nomeArquivo);  
  13. O post de isrnick em <CODE error expected ':', ',', ';', '}' or '__attribute__' before '{' token> foi marcado como solução   
    menu() é uma função, e deve ser chamada para ser executada. No caso deve chamar a função menu(); dentro da função main() (no local apropriado), e usar if-else-if ou então switch-case para realizar uma das operações de inserir cadastro, ou exibir cadastros, conforme a opção escolhida e retornada pela função menu().
     
    #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 5 typedef struct pessoa { char nome[10]; char livro[10]; int cod; char autor[10]; char obra[10]; char editora[10]; } tipo_pessoa; int menu() { int opcao; printf("\n\n ==== MENU DE opções ====\n"); printf("0 - ENCERRAR PROGRAMA. \n"); printf("1 - INSERIR CADASTRO\n"); printf("2 - EXIBIR TODOS \n"); printf("\nO que deseja fazer? "); scanf("%d", &opcao); return opcao; } int main() { tipo_pessoa lista[TAM]; int i = 0, j, opcao; do { opcao = menu(); switch (opcao) { case 1: if (i < TAM) { lista[i].cod = i; printf("Insira o nome da pessoa %d: \n", i + 1); gets(lista[i].nome); fflush(stdin); printf("Insira o nome do livro %d: \n", i + 1); gets(lista[i].livro); fflush(stdin); printf("Insira o nome do autor %d: \n", i + 1); gets(lista[i].autor); fflush(stdin); printf("Insira o nome da obra %d: \n", i + 1); gets(lista[i].obra); fflush(stdin); printf("Insira o nome da editora %d: \n", i + 1); gets(lista[i].editora); fflush(stdin); i++; } else { system("cls"); printf("Sistema de cadastro lotado. Não é possível armazenar mais informações!\n\n"); } break; case 2: for (j = 0; j < i; j++) { printf("%s - %d - %s - %s - %s - %s\n", lista[j].nome, lista[j].cod, lista[j].livro, lista[j].autor, lista[j].obra, lista[j].editora); } break; case 0: printf("Programa finalizado.\n"); break; default: printf("Opcao invalida.\n"); } system("pause"); } while (opcao != 0); return 0; }  
    Também coloquei um do-while para continuar o programa enquanto não digitar 0 no menu. Mas não testei o código, teste e me diga se der algum erro.
  14. O post de isrnick em Série de Fibonacci em c foi marcado como solução   
    Pelo que entendi basta usar essa fórmula para calcular o n-ésimo número da sequência de Fibonacci, e imprimir o resultado.
     
    #include <stdio.h> #include <math.h> int main() { int n, fn; printf("Deseja calcular qual numero Fibonnaci? "); scanf(" %d", &n); fn = (int) 1.0/sqrt(5.0) * (pow((1.0 + sqrt(5.0))/2.0, n) - pow((1.0 - sqrt(5.0))/2.0, n)); printf("F(%d) = %d\n", n, fn); return 0; }  
  15. O post de isrnick em operação com vetores. condicional. operadores lógicos. faeterj. fac. av2. 2018. foi marcado como solução   
    É o enunciado realmente menciona que a função recebe 2 vetores... Mas não acho que o professor consideraria um erro se adicionar os comprimentos dos vetores como parâmetros.
     
    Mas deste modo a função não é modular, ou seja não pode ser reutilizada, visto que só vai funcionar nesse programa específico, ou então a pessoa que escrever o outro programa também precisaria saber previamente que deve definir as constantes X e Y para que a função funcione.
     
     
     
    Com os comprimentos dos vetores como parâmetros a função exige que essas informações sejam fornecidas para poder funcionar.
     
    Isso se torna especialmente importante mais pra frente quando tiver dividindo seu código em vários arquivos, e aprende a fazer bibliotecas que podem ser reutilizadas em programas diferentes, bastando importar o código que já está pronto no novo programa.
  16. O post de isrnick em Funçao com ponteiros, vetores, laços e condicionais. FAETERJ. 2018. FAC. AV2. foi marcado como solução   
    Sim, tem uma linha vermelha apontando para o somaAl, não para o scanf... E fazer a soma na função faz sentido.
    adicionado 9 minutos depois  
    Como falei se o scanf estiver fora da função você pode fazer um scanf para obter o primeiro valor de agência antes do while por exemplo...
     
    int main(void) { int agencia, dig1; int conta, dig2; printf("\nDigite a agencia:.... "); scanf("%d",&agencia); while (agencia!=0) { printf("\nDigite a conta:...... "); scanf("%d",&conta); calcDigitos(conta,agencia,&dig1,&dig2); //...código que imprime os resultados aqui... printf("\nDigite a agencia:.... "); scanf("%d",&agencia); } return 0; }  
     @jcgs98 Outra opção seria fazer um loop infinito e interromper com um break como o  @Flávio Pedroza indicou.
  17. O post de isrnick em Busca em vetor desordenado foi marcado como solução   
    #include <stdio.h> #include <stdlib.h> #define X 8 int busca (int num, int pos, int *vetor,int inic) { int i; for (i=inic; i<pos; i++) { if (vetor[i]==num) return i; } return -1; }  int main (void) { int xua,m, i,j, aux=0; int achar=0; int vetor [X]; for(i=0;i<X;i++) { printf("\n\nDigite o numero %d do Vetor...: ",i+1); fflush(stdin); scanf("%d",&vetor[i]); } printf("\nVetor gerado\n"); for(i=0;i<X;i++) { printf("%d ",vetor[i]); } printf("\nQual numero buscar? "); scanf("%d",&achar); aux=busca (achar,X,vetor,0); if (aux == -1) printf("\nNumero nao encontrado!"); while (aux != -1) { printf("\nNumero %d encontrado na posicao.........: %d do vetor.",achar,aux); xua=aux+1; aux=busca (achar,X,vetor,xua); } return 0; }  
     
     
  18. O post de isrnick em Média entre vetores. Questão de prova. Análise de Sistemas. Faeterj. FAC. foi marcado como solução   
    Sim, o código está errado, o índice do vNota nessa linha deveria ser i, ficando:
    vTot[func]+=vNota[i];  
  19. O post de isrnick em Caixeiro Viajante com 3 dimensões foi marcado como solução   
    Se entendi o que quer bastaria adicionar a dimensão z para indicar altura da cidade e usar a formula para calcular distância entre 2 pontos em 3 dimensões:
     

     
    Se o código já está funcionando corretamente para 2 dimensões creio que o restante do código não muda, pois não usa mais as coordenadas das cidades, só as distâncias entre elas.
  20. O post de isrnick em C++ Enter to continue e Problemas com Loop foi marcado como solução   
    ignore() pode receber 2 parâmetros, o número máximo de caracteres a serem ignorados, e um caractere delimitador que indica quando parar de ignorar:
    https://en.cppreference.com/w/cpp/io/basic_istream/ignore
     
    Então se usar cin.ignore(5, '\n') por exemplo vai ignorar até 5 caracteres ou até encontrar um caractere nova linha, o que ocorrer primeiro.
     
    E para ignorar qualquer quantidade de caracteres pode usar numeric_limits<streamsize>::max(), da biblioteca <limits>, para obter o tamanho máximo possível para uma stream. E o comando ficaria assim:
     
    #include <limits> ... cin.ignore(numeric_limits<streamsize>::max(), '\n');  
  21. O post de isrnick em Lendo string em um while ocorre loop infinito foi marcado como solução   
    x é um vetor de caracteres, e o nome de um vetor sem colchetes já é a referência/endereço de memória do vetor, logo não se usa & antes do nome do vetor para obter a referência.
     
    E "%[^\n]%*c" usando %[^\n] junto de %*c no mesmo scanf não funciona como esperado, o %*c não funciona nesse caso, ao invés disso use 2 scanfs um após o outro:
    scanf(" %29[^\n]", x); scanf("%*c"); Observe que limitei a 29 caracteres para garantir que não estoura o tamanho do vetor de caracteres.
  22. O post de isrnick em Funcões em estruturas de repetição(RESOLVIDO) foi marcado como solução   
    Pode sim, e funciona assim mesmo.
     
    Se você inverter os retornos da função e fizer continuar no ciclo while enquanto algo()==1 nem precisa da igualdade, pois em C zero 0 é igual a falso, e qualquer valor diferente de zero é verdadeiro.
     
    Então poderia fazer assim:
    int algo(){ //Você colocou um ; antes da chave { mas não deve int algumacoisa,outra; //algumas instruções aqui.... if(algumacoisa==outra){ return 1; } else{ return 0; } //também faltou essas chaves } int main(){ //esqueceu de colocar parenteses no main() while(algo()){ // aqui ela ficaria repetindo até retornar 0 } return 0; //esqueceu o return 0 }  
  23. O post de isrnick em Rodar Formulário Python clicando no arquivo foi marcado como solução   
    Está no Windows?
     
    A instalação do Python já deveria ter associado arquivos com extensão .py ao executável do Python, e quando desse 2 cliques no arquivo .py o código deveria ser executado, ao invés de aberto para edição... Você escolheu outras opções durante a instalação do Python?
     
    Tente usando a extensão .pyw no arquivo, até porque essa extensão seria mais apropriada para um programa usando GUIs (como o Tkinter), pois essa extensão é associada ao executável pythonw.exe que não usa o terminal cmd (prompt), assim apenas a janela do Tkinter é aberta sem o terminal.
  24. O post de isrnick em Total da variável não exibe (do while) foi marcado como solução   
    As variáveis não são inicializadas (com valor 0), então tá pegando o valor lixo qualquer que já estava na memória e somando sobre ele.
  25. O post de isrnick em Como copiar variável (%%f) para outro Batch? foi marcado como solução   
    @JohnWiki Basta usar caracteres de escape:
    http://www.robvanderwoude.com/escapechars.php
     
    Aí o script batch fica assim:
    @echo off echo @echo off >> "Unir.bat" echo if exist #Nivers.txt del /f #Nivers.txt ^>nul >>"Unir.bat" echo for %%%%f in (*.log) do type "%%%%f" ^>^> #Nivers.txt >>"Unir.bat" echo exit /b >>"Unir.bat" pause>nul exit E a saída gerada:
    @echo off if exist #Nivers.txt del /f #Nivers.txt >nul for %%f in (*.log) do type "%%f" >> #Nivers.txt exit /b  

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!