Ir para conteúdo
Fórum Script Brasil

isrnick

Membros
  • Total de itens

    70
  • Registro em

  • Última visita

Tudo que isrnick postou

  1. isrnick

    Tutoriais

    Tem um livro open source/livre bom pra quem está começando em Python, ou até aprendendo a programar em geral, chamado Think Python (Pense Python) também conhecido como How to Think Like a Computer Scientist (Como Pensar Como um Cientista da Computação) originalmente escrito por Allen B. Downey para Java, e posteriormente adaptado para Python por Jeffrey Elkner, Chris Meyers, e Peter Wentworth. Recomendo especialmente as versões online interativas em inglês ou português, que permitem executar os exemplos do livro, assim como resolver e rodar os exercícios propostos, no próprio navegador. Português: Versão em português: https://penseallen.github.io/PensePython2e/ (Contém versão para ler online, ou link para comprar a versão impressa.) Versão EPUB em português: https://github.com/PenseAllen/PensePython2e/blob/master/ebooks/PenseEmPython2e.epub Versão PDF em português: http://eltonminetto.net/docs/pythontut.pdf (Acredito que esse PDF seja uma tradução diferente.) Versão online interativa em português: https://panda.ime.usp.br/pensepy/static/pensepy/index.html (Dispinibilizado pelo IME-USP para ser usado pelos alunos de introdução a programação, traduzida da versão interativa em inglês. Link para a página contendo outros recursos para estudo: https://panda.ime.usp.br/panda/python ) Inglês: Versão original em inglês: http://greenteapress.com/wp/think-python-2e/ (Contém links para download de PDF, ler online em HTML, ou comprar a versão impressa.) Versão modificada por Peter Wentworth em inglês: http://openbookproject.net/thinkcs/python/english3e/ (Por se tratar de um livro open source outros autores tem a possibilidade de fazer versões modificadas ou ampliadas baseadas no original. As versões interativas por sua vez basearam-se nessa versão.) Versão online interativa em inglês: https://runestone.academy/runestone/static/thinkcspy/index.html Outro livro livre online que é recomendado mais pra quem já tem algum conhecimento de linguagem de programação é o "Dive Into Python 3" (http://www.diveintopython3.net/), mas não encontrei tradução dele.
  2. Aqui eu fiz uma função simples para comparar datas: struct Data{ int dia, mes, ano; }; /*Retorna 0 se data1 == data2, um número positivo se data1 > data2, ou negativo se data1 < data2. */ int compara_datas(Data data1, Data data2){ int delta_anos, delta_meses, delta_dias; delta_anos = data1.ano - data2.ano; delta_meses = data1.mes - data2.mes; delta_dias = data1.dia - data2.dia; if (delta_anos != 0) return delta_anos; if (delta_meses != 0) return delta_meses; return delta_dias; }
  3. É um programa simples, seu conhecimento é mais que suficiente. O tipo char nada mais é que um número inteiro, a diferença do o tipo char para o tipo int é que ele tem apenas 8 bits em forma binária, enquanto o int tem pelo menos 16 bits (normalmente tem 32 bits na arquitetura x86), quando você manda imprimir um caractere, por exemplo usando "%c" no printf() o que ele faz é usar uma tabela de conversão que pega esse número inteiro e acha o caractere correspondente na tabela, e então imprime o caractere na tela. Existem várias tabelas de caracteres, e uma bem básica e conhecida é a tabela ASCII. Então seu programa deve simplesmente pegar todos os caracteres digitados pelo usuário e imprimir na tela o número inteiro correspondente, usando "%u" (inteiro sem sinal) no printf(). Por exemplo: #include <stdio.h> int main() { unsigned char c = '\0'; while(c != '\n'){ c = getchar(); if (c != '\n') printf(" %c\t%u\n", c, c); } return 0; }
  4. O valor está de x está fixo, logo x%20 vai calcular o número de notas de 20 do valor total, não apenas do que restou. Faça assim: x = int(input()) a = x//100 x = x%100 b = x//50 x = x%50 c = x//20 x = x%20 d = x//10 x = x%10 e = x//5 x = x%5 f = x//2 g = x%2 print(a, b, c, d, e, f, g)
  5. Se a primeira letra vai ser lida antes do ciclo, o valor inicial de cont deve ser 1. E nesse caso também poderia fazer assim: #include<stdio.h> int main(void){ int cont=1; char letra; scanf("%c",&letra); while(letra != 'A' && letra != 'a'){ scanf("%c",&letra); if (letra != '\n') cont = cont + 1; } printf("Foram feitas %d tentativas",cont); return 0; } Para descartar os '\n' que ficam como lixo na entrada padrão, e contar apenas as letras. Dessa maneira você pode entrar tanto 1 letra por vez seguidas de Enter, quanto digitar todas as letras de uma vez e só então da Enter: b c d e a ou então assim: bcdea Ambos resultam em: Foram feitas 5 tentativas
  6. Ok, o problema é que o comprimento do array/vetor é muito grande, ou seja quando você faz prohibited[N], com N tendo valor de mais de 1 milhão, está tentando reservar espaço demais no stack da memória para armazenar os valores, e isso causa o erro. Nesse caso é necessário alocar memória dinamicamente, usando malloc() (da biblioteca stdlib.h), a fim de guardar os valores no heap da memória, onde grandes quantidades de dados podem ser armazenados: #define L 1024 /* linear lattice size */ #define ofile "ZProhibited.10" /* output binary file name */ #include <stdio.h> #include <ctype.h> #include <stdlib.h> int main() { int N=L*L, *prohibited, i; FILE *fdata; prohibited = malloc(N * sizeof(*prohibited)); for(i=0 ; i<3L+1 ; i++) { prohibited[i]=0; } for(i=3L+1 ; i<3L+12 ; i++) { prohibited[i]=1; } for(i=3L+12 ; i<4L+1 ; i++) { prohibited[i]=0; } for(i=4L+1 ; i<4L+12 ; i++) { prohibited[i]=1; } for(i=4L+12 ; i<N ; i++) { prohibited[i]=0; } fdata=fopen(ofile,"wb"); fwrite(prohibited, sizeof(int), N,fdata); fclose(fdata); free(prohibited); return 0; } OBS: Lembre-se que é necessário usar free() para liberar a memória alocada dinamicamente.
  7. Aqui está gerando o arquivo, que problema está tendo?
  8. Para postar códigos use a tag CODE apertando o botão <> no topo do campo de respostas, assim você preserva a formatação do código e evita que o fórum faça alterações nele. Por exemplo, o fórum "comeu" todos os [ i ] (sem espaços) do seu código pois no fórum isso é a tag para deixar o texto em itálico, então o texto do seu código está em itálico a partir do primeiro que foi encontrado (os demais apenas somem porque o texto já tá em itálico). Mas já posso ver alguns erros no programa, onde você está colocando comparações no primeiro parâmetro dos ciclos for, como i>4L, imagino que queria colocar i = 4L+1? E talvez seria melhor fazer um único ciclo for com alguns ifs dentro...
  9. O objeto arquivo (ftest) já é iterável, e quando iterado sobre retorna uma linha a cada iteração, logo não é necessário usar read ou readlines. Logo teste isso: def search(): filetest = "C:/Python33/exemplo.txt" #demanded codes file #read the demanded codes file ftest = open(filetest, 'r') for i, line in enumerate(ftest): print(i, line) A saída na tela deveria ser o número da linha seguido do texto da linha: Por exemplo para exemplo.txt: abcde ferd sfdasf gfdgrt gfdg A saída será: 0 abcde 1 ferd 2 sfdasf 3 gfdgrt 4 gfdg
  10. Tenta assim: typedef struct node{ char dado; struct node *esq; struct node *dir; } Node;
  11. O problema é que você não definiu o que a função primeiroPilha retorna se algum dos ifs dentro da função não for satisfeito. Ou seja, se alguma condição dos ifs da função não for VERDADEIRO, esta função não retornará nada, pois o único return está dentro dos ifs, e essa função tem tipo char (não é void) e sempre precisa retornar algum valor.
  12. O problema provavelmente é que está usando o especificador de formato errado para imprimir na tela o tipo unsigned long long. Veja, esse código funcionou como esperado aqui: #include <stdio.h> int main(){ unsigned long long i = 1; printf("%llu\n", i<<60); return 0; } Um site contendo a tabela de especificadores de formato do printf() e sua família de funções: http://pt.cppreference.com/w/c/io/fprintf
  13. Em outras linguagens é usado abre e fecha chaves { }, ou algo do tipo "comando e fim_do_comando", para indicar onde começa e termina um bloco de comandos. Mas em Python a indentação é que indica quais comandos pertencem a um mesmo bloco. <comando 1> if <condicao>: <comando 1 dentro do bloco de comandos do if> <comando 2 dentro do bloco de comandos do if> <comando 2> <comando 3> Ex: a = 7 print "fora do if" if a < 10: print "dentro do if" a = 15 print "ainda dentro do if" print "fora do if novamente" Logo, é muito importante sempre usar a indentação corretamente, de forma consistente. E isso é muito bom pra quem está aprendendo a programar, pois aprende dês de cedo a deixar o código bem organizado, já que em Python indentar corretamente é obrigatório.
  14. A mensagem de erro já diz o que é, ou seja, significa que você colocou algum espaço em branco no começo da primeira linha quando você copiou e colou, e não deveria.
  15. Aqui compilou e rodou normalmente, sem erros.
  16. Seus erros provavelmente estão acontecendo por causa de má indentação do código. Ou seja, o número de espaços em branco no começo de cada linha tem ser consistentes e indicar corretamente a que agrupamento os comandos pertencem. Em Python essa sintaxe é válida sim: elif 0 <= temp <= 20: E funciona exatamente como esperado, ou seja a condição será satisfeita se o valor de temp for maior ou igual a 0 e menor ou igual a 20. (Obs: Em várias outras linguagens de programação essa sintaxe não funciona.) E o operador 'E/AND lógico' em Python é o operador and, enquanto o operador & é um operador 'E/AND binário'. Logo, o modo alternativo de escrever a mesma comparação acima em Python corretamente seria assim: elif (temp >= 0) and (temp <= 20): Mas ambos farão a mesma coisa em Python. Fora a indentação errada a única coisa que está faltando no seu código original é converter o valor obtido pelo raw_input() para um número inteiro, visto que essa função retorna uma string não um número. Pra isso basta usar a função int(), e o código fica assim (em Python 2): temp = int( raw_input('Entre com a temperatura:') ) if temp < 0: print 'Congelando...' elif 0 <= temp <= 20: print 'Frio' elif 21 <= temp <= 25: print 'Normal' elif 26 <= temp <= 35: print 'Quente' else: print 'Muito quente!' E em Python 3 ficaria assim: temp = int( input('Entre com a temperatura:') ) if temp < 0: print('Congelando...') elif 0 <= temp <= 20: print('Frio') elif 21 <= temp <= 25: print('Normal') elif 26 <= temp <= 35: print('Quente') else: print('Muito quente!')
  17. Sua função não verifica se é palíndromo, apenas gera o número invertido (com um zero a mais), então ou muda o nome da função para "reverso" ou muda a lógica dela pra verificar se é palíndromo... int palindromo (int num){ int rev = 0, cnum = num; while (num){ //O erro de colocar 0 a mais estava nessa linha //multiplicando tudo por 10, ao invés de apenas rev rev = num % 10 + rev * 10; num /= 10; } if (cnum == rev) return -1; // Valor != de 0 é VERDADEIRO else return 0; // 0 = FALSO }
  18. Isso foi introduzido na versão C99 da linguagem (antes não era permitido), então modifique as configurações do codeblocks (Settings > Compiler...) para compilar usando esse padrão (ou o C11 que é mais recente). O parâmetro a ser passado para o compilador deve ser um desses: Para C99: -std=c99 Para C11: -std=c11 Para C99 com extensões GNU: -std=gnu99 Para C11 com extensões GNU: -std=gnu11
  19. #include <iostream> using namespace std; int main() { cout << fixed; cout << 1456345.65 << endl; cout << scientific; cout << 1456345.65 << endl; return 0; } http://en.cppreference.com/w/cpp/io/manip/fixed
  20. Acredito que seja algo assim o que o enunciado pede: O objetivo seria criar 10 ponteiros e fazer cada um deles apontar para uma linha/palavra da matriz, tal que o primeiro ponteiro aponte para a posição da matriz que tem a primeira palavra em ordem alfabética, o segundo ponteiro aponte para a posição da matriz com a segunda palavra em ordem alfabética, etc. Assim quando você chamar esses ponteiros em seqüência para imprimir a palavra, você vai imprimir as palavras em ordem alfabética, mas a matriz original nunca foi alterada, e não foi necessário copiar nenhuma string. #include <stdio.h> #include <string.h> int main() { int i, j; char M[10][15] = {"brasil", "argentina", "colombia", "russia", "china", "bolivia", "franca", "portugal", "espanha", "israel"}; char *p[10]; // Ordenando os ponteiros usando o algoritmo de ordenação por inserção: for (i=0; i<10; i++){ for (j=i; j > 0 && strcmp(M[i], p[j-1]) < 0; j--){ p[j] = p[j-1]; } p[j] = M[i]; } printf("Imprimindo a partir dos ponteiros:\n\n"); for (i=0; i<10; i++) printf("%s ", p[i]); printf("\n\n\nMas a matriz original não foi modificada:\n\n"); for (i=0; i<10; i++) printf("%s ", M[i]); printf("\n"); return 0; }
  21. Quando se usa & antes do nome de uma variável, como &a no seu programa, está sendo obtida a referência/endereço de memória desta variável, para acessar o valor guardado na variável deve-se usar o nome da variável sem &. Logo, no printf() não se deve usar &a, pois você quer imprimir o valor armazenado na variável, não a referência dessa variável. O motivo pelo qual você usa &a no scanf() é porque nesse caso o objetivo é informar para esta função o endereço de memória onde o valor capturado pela função deve ser guardado, assim quando a função guardar um valor nesse local da memória estará de fato guardando um valor no espaço da memória reservado para a variável "a", logo posteriormente esse valor poderá ser obtido acessando essa variável.
  22. O if anterior ao else não está abrindo chaves {...
  23. Você tem que checar se está em uma borda, antes de comparar os valores, e só compara se a posição adjacente existir... Por exemplo, só compara com a posição à esquerda se primeiro for verificado que a posição atual não está na borda esquerda (ou seja, se i > 0): if (i > 0 && matriz[i][j] == matriz[i-1][j]){ }
  24. A ideia é essa: char nome[turmas][nmal][100]; float notas[turmas][nmal][4]; int turma, aluno, nota; for (turma = 0; turma < turmas; turma++){ for (aluno = 0; aluno < nmal; aluno++){ printf("Digite o nome do aluno %d da turma %d: ", aluno + 1; turma + 1); //Abaixo usei fgets ao invés de gets, pois fgets permite definir o numero //maximo de caracteres a serem armazenados no vetor, logo não existe risco //de ultrapassar o comprimento do vetor com um nome longo e dar erro. fgets(nome[turma][aluno], 100, stdin); //Note acima que não passamos a 3a dimensao da matriz nome, pois queremos //passar a referencia/endereco de memoria da primeira posicao do vetor de //100 caracteres que armazenara a string contendo o nome do aluno. Observe, //também que nesse caso não e necessario usar o operador & para obter a //referencia, pois por se tratar de um vetor inteiro nesse caso já esta //implicito que está passando uma referência e não um valor. for (nota = 0; nota < 4; nota++){ printf("Digite a nota da %da avaliacao: ", nota + 1); scanf("%f%*c", &notas[turma][aluno][nota]); //Observe a diferenca aqui: Precisamos usar & pois agora passamos //apenas uma posicao da matriz, não um vetor ou uma matriz inteira, //afinal usamos as tres dimensoes da matriz, e nesse caso sem o operador //& seria obtido o valor armazenado na posicao, ao invés da referencia //que é o que precisa ser passado para o scanf. } } }
×
×
  • Criar Novo...