thegoodfellas/blogset-br huggingface dataset:
O amor pode ser doce em determinados momentos, em outros te machucar e em outros pode te fazer perder o chao. Para mim, e o sentimento mais complexo do mundo, ate porque ele e um misto de todos os outros: a alegria, a saudade e assim por diante. Acho ate que quem nao passou por todos os sentimentos nunca amou de verdade. E a gente briga por que ama? Sinceramente nao sei. Odeio brigar, alias, ja me disseram que eu nao sirvo para brigar. Meu coracao se despedaca e como sou intrinseca, sofro sozinha por dentro. Entao vem a fase da tristeza, fico me perguntando se tudo foi realmente necessario ou se minutos foram desperdicados. A fase da saudade toma conta, vem aquele anseio por um beijo e um abraco da pessoa amada, lhe dizendo que tudo vai ficar bem.Apaixonamo-nos por quem menos esperamos, um amigo, amigo do amigo, um vizinho, alguem que voce conheceu por um acaso. E por que razao se apaixonar? Existe um cupido? E o amor de verdade e aquele que dura para sempre? E se as pessoas mudam com o passar dos anos e como se nos apaixonassemos a cada dia por "outra pessoa"?Complexo?! Ah, se e. Por estas e outras que: quisera eu entender o amor... E sempre bom ter onde e como se expressar.Principalmente para mim, que nao abro mao dos meus momentos so meus. Eu e eu mesma. Eu e minha mente. Eu e meus dilemas.Por que sao deles que nascem minhas conviccoes. Sao meus proprios dilemas que me apontam oscaminhos, as causas, as solucoes.Mas e quando estes mesmos dilemas te apontam para ainda mais dilemas?Minhas conviccoes me dizem (e me provam varias vezes) que voce atrai tudo o que voce transmite. Isso tem funcionado muito bem com as pessoas e com o mundo ao meu redor.Menos com as pessoas que sao as mais importantes da minha vida.Meus pontos fortes, mas tambem meus pontos fracos.Sao eles minha referencia para pensar 2 vezes em muitas coisas.Sao eles que me seguram aqui, quando muitas vezes o que quero e mesmo voar.So eles.Mas agora minhas conviccoes se tornam (novamente) dilemas: Se funciona com todos, por que nao funciona com eles? Se eles sao os que mais convivem comigo, nao deveriam ser exatamente eles os que mais me conhecem?Mas eu sinto exatamente o oposto. E pelo jeito, nao apenas eu.Se para as pessoas mais importantes da minha vida eu nao transpareco o que realmente sou e por que alguma coisa esta errada. Seria eles? Eu?Seria comodo dizer que o inferno sao os outros. Mas isso nao e verdade. O inferno e voce mesmo. E se voce quer mudaralgo. Mude voce primeiro. Mas e quando voce muda e mesmo assim nao adianta? Quando parece que ha barreiras, janelas fechadas que impedem que a luz passe?Eu poderia deixar de fazer muitas coisas, que eu sei que resolveriam. Podia agir de determinada maneira, ao inves de outra. Mas ai, eu nao seria eu. Eu deixaria de ser eu para agradar a eles.E ai vem outro dilema: ate que ponto seus sonhos,
suas vontades, seus desejos e suas conviccoes valem a pena? Ate que ponto te fazem feliz, mas entristecem outros?Dilemas.A vida sem eles nao teria um sentido. Voce nao teria principios, virtudes.. Nao existiria o que e certo ou errado, dentro das suas conviccoes.Conversar com seus dilemas e saudavel, e natural e preciso. Conversar com seus dilemas e entende-los e torna-los possiveis caminhos. E enteder voce mesmo.Afinal, o que seria de voce, sem um rumo a seguir neste pequeno grande mundo?Isso aqui nao e para parecer um diario.Na verdade eu nem sei porque resolvi tornar isso publico creio que por que eu gosto de compartilhar experiencias e aprender com elas.Enfim.Eu senti uma vontade ( e uma saudade) extrema de escrever.Assim como dancar, meditar, conversar, fotografar (ou pelo menos tentar tirar fotos rsrs)....Escrever tambem faz parte de uma das maneiras de me expressar. Mesmo que os textos terminem sem um fim.Eles simplesmente passaram a existir com a forca dos sentimentos e dilemas que precisavam se tornar concretos.E assim foi..
= 7.6-------------------------------------------- C:\Windows\Performance\WinSAT\DataStore = Essa pasta guarda os dados do indice de experiencia do Windows 7. Apague os arquivos da pasta para refazer o teste.Core i3 serie 5xx (desktop) - core Nehalem - 1o geracao - soquete LGA1156Core i3 serie 3xx (portatil) - core Nehalem - 1o geracao - soquete BGA1288 e G1Core i3 serie 21xx (desktop) - core Sandy Bridge - 2o geracao - soquete LGA1155Core i3 serie 23xx (portatil) - core Sandy Bridge - 2o geracao - soquete BGA1023, PGA988Core i3 serie 32xx (desktop) - core Ivy Bridge - 3o geracao - soquete LGA1155Core i3 serie 3xxx (portatil) - core Ivy Bridge - 3o geracao - soquete BGA1023, PGA988--------------------------------------------Meus Processadores:AMD Duron 1100(1.1GHz) K7(Socket A 462 - 453pinos-Morgan) 64K L2 (Out/2001)AMD Sempron 2800+(1.6GHz) (Socket 754-Palermo) 256K L2AMD Athlon 64 3800+(2.4GHz) K8(AM2 940pinos-Orleans) 512K L2AMD Sempron LE-1200(2.1GHz) K8(AM2 940pinos-Sparta) 512K L2
"Configuracoes" , "Conexoes sem fio e rede" , "Wi-Fi"Toque e segure o nome da rede que esta conectado;Vai aparecer a opcao "Modificar a config. da rede", toque nessa opcao;Toque na opcao "Mostrar opcoes avancadas";Agora em "Config. de proxy", escolha "manual" e digite o endereco do proxy;ex: 192.200.10.1Digite a porta do proxy no campo "Porta do proxy";ex: 3128Salvar. Pronto, ja pode usar seu navegador.
sobre eles, quando falei sobre funcoes (aqui), mas nunca e tarde (rsrs).Faca sem saber como.Em todos os codigos que vimos ate agora usando funcoes, sempre criamos as funcoes antes de chama-las na main. O codigo da nossa funcao main era sempre o ultimo e, assim, as funcoes ja eram 'conhecidas' dela.No entanto e possivel criar a main antes das outras funcoes. O unico requisito e informar como essas funcoes serao chamadas, quais o seus retornos e parametros.Esta e a funcao dos prototipos. Eles se parecem com o cabecalho das funcoes, exceto que o nome dos parametros pode ser omitido.A 2a novidade, que ja aparece nos prototipos, e a forma de passar uma matriz para uma funcao. Deve ser informado o tipo de dados contido na matriz e o tamanho de suas dimensoes. O tamanho da 1a dimensao pode ser omitido, somente da 1a. Se a matriz tiver 3 dimensoes, por exemplo, o tamanho das 2a e 3a dimensoes tem que ser informado.A ultima e a forma de 'varrer' a matriz. Usamos um for para 'varrer' as linhas e, dentro dele, um outro for para 'varrer' todas as colunas desta linha antes de passar para a proxima. Por isso a necessidade de saber quantas linhas e colunas a matriz tem.Como as dimensoes da matriz ja sao conhecidas e uma otima pratica criar constantes globais que armazenem estes valores, o que facilita o acesso a elas em qualquer parte do programa.Funcoes x MatrizesDa mesma forma que um vetor pode ser alocado dinamicamente, uma matriz tambem pode ser. Observe o codigo abaixo:#include <stdio.h>#include <stdlib.h> int ler_int(){ int digitado; printf("Digite um valor inteiro: "); scanf("%d",&digitado); return digitado;} void mostra_int(int num){ printf("%d ",num);} int* preenche_mat_int(int linhas, int colunas){ int *mat=0, i, j; if ((linhas * colunas) > 0) mat = (int *) malloc (linhas * colunas * sizeof(int)); if (mat){ printf("\nPREENCHENDO A MATRIZ:\n"); for(i = 0; i < linhas; i++) for(j = 0; j < colunas; j++) *(mat + (i * colunas) + j) = ler_int(); } else printf("NAO FOI POSSIVEL ALOCAR A MATRIZ!!!\n"); return mat; } void exibe_mat_int(int* mat, int linhas, int colunas){ int i, j; printf("\n"); for(i = 0; i < linhas; i++){ for(j = 0; j < colunas; j++) mostra_int(*(mat + (i * colunas) + j)); printf("\n"); } printf("\n\n");} int main(){ int *matriz, linhas, colunas; printf("Digite o numero de linhas da matriz (maior que zero):\n"); linhas = ler_int(); printf("Digite o numero de colunas da matriz(maior que zero):\n"); colunas = ler_int(); matriz = preenche_mat_int(linhas, colunas); if(matriz){ exibe_mat_int(matriz, linhas, colunas); free(matriz); } system("pause");}A diferenca basica neste codigo e a permitir ao usuario que defina o numero de linhas e colunas da matriz, por isto nao pudemos armazenar estes valores em constantes globais (observe que tivemos que passar estes valores para todas as funcoes). Uma vez definidas, linhas e colunas, verificamos se os valores informados foram validos e, alocamos espaco para a matriz.Como o bloco de memoria alocado nao foi definido como uma matriz, ele nao pode ser indexado como uma, usando os []. A solucao para isso e o uso de ponteiros e da aritmetica de
ponteiros.A linha 25 mostra como isto e feito. Observe a multiplicacao de i, que contem o numero da linha atual, pela quantidade de colunas. Da pra entender o porque, certo?Por hoje e isto. Ate o proximo post.
Hoje vamos falar sobre um vetor que o C trata de forma especial: o vetor de caracteres, tambem chamado de string.A comunicacao entre o homem e a maquina!Como ja aprendemos aqui, um vetor e um agrupamento de variaveis do mesmo tipo. Ate agora trabalhamos com vetores de inteiros. Apesar de termos usado vetores de caracteres desde este post.Voce talvez nao tenha percebido ainda, mas tudo o que esta digitado aqui sao vetores de caracteres. Uma palavra e formada de letras (caracteres) agrupadas (vetor).Este e o tipo de vetor mais utilizado em programas que interagem com o usuario (mesmo nos programas com interface grafica).Por ser muito usado, este vetor e tratado de forma especial pelo C. Nao que ele seja mais complicado, mas sim para facilitar o trabalho dos programadores (no caso, nos).Vejamos como isto e feito.Nao acaba onde termina!Como ja falamos, um vetor em C sempre comeca com o indice 0 (zero), mas nao possui nenhum restricao quanto ao seu tamanho, ficando sob a responsabilidade do programador.Relembrando: Se declararmos um vetor de inteiros com o tamanho 5 (int vet[5]), o seu ultimo elemento sera o que tem o indice 4 (tamanho do vetor - 1), mas se fizermos uma atribuicao usando o indice 5 (vet[5] = 10), ela sera aceita (apesar de estar errada). O compilador nao tem como saber onde termina este vetor.No caso do vetor de caracteres e necessario indicar este fim para que o compilador saiba onde ele acaba. Isto e feito com um caracter especial (\0).Observe a figura abaixo:Esta e a forma como o C armazena a palavra CASA. Um vetor de caracteres terminado por \0.A forma de declarar e inicializar este vetor e: char vet[5] = {'C', 'A', 'S', 'A'};ou como e mais comum: char vet[5] = "CASA";Acredito que esta 2a forma e familiar. E ela que temos usado com a funcao printf. Observe que a palavra CASA tem 4 letras, mas nosso vetor tem tamanho 5, ou seja, existe um caracter a mais para guardar o \0.No proximo post veremos como esta forma especial que o C trata os vetores de caracteres facilita nossa vida.Aproveitando o post, gostaria de desejar a todos um otimo Natal, com saude, amor e paz, que sao as coisas que realmente importam. Um abraco a todos. Como falei no ultimo post da serie sobre matrizes, hoje falaremos sobre algumas correcoes necessarias em nossos codigos.Trabalhando com uma entrada limpa.No post citado acima inclui um comando novo, e nao expliquei o que ele fazia. Antes de ver o que ele faz, vamos ver um codigo simples que mostra porque ele e necessario.#include <stdio.h>#include <stdlib.h> int main (){ char ch; int i; for(i = 0; i < 10; i++){ printf("Digite o %do caracter: ", i+1); scanf("%c", &ch); } getchar(); return EXIT_SUCCESS;}Execute esse codigo e veja o que acontece.Voce conseguiu digitar os 10 valores?Nao??? Por que sera?O buffer do tecladoQuando voce pressiona uma tecla (ou conjunto de teclas) em seu teclado e gerada uma informacao: a tecla (ou conjunto de teclas) que foi digitada. Esta informacao e armazenada em uma area da memoria chamada de
buffer do teclado, onde fica disponivel para ser utilizada. Este buffer pode armazenar uma quantidade razoavel de teclas digitadas que serao usadas assim que forem requisitadas.No codigo acima, a funcao scanf 'recupera' o conteudo de uma dessas teclas, e o armazena na variavel ch.Mas pararmos para pensar, veremos que para armazenar a letra a, por exemplo, na variavel ch usando a funcao scanf, digitamos duas teclas: a tecla a e a tecla enter.Quando a scanf 'recupera' a tecla a, a tecla enter continua no buffer. Por isso que na proxima chamada da scanf ela ira recuperar o valor da tecla enter, pulando uma entrada. Este problema e classico e recebeu um nome: sujeira no buffer de entrada.Existem algumas formas de resolver este problemas.Vejamos quais sao elas, da mais simples a mais drastica (rsrs).Lendo 2 e ignorando 1.Este subtitulo diz tudo. Observe o comando abaixo: scanf("%c*c", &ch);Ele faz exatamente isto: Le 2 caracteres, e ignora o segundo. Susbstituia a chamada da funcao scanf no codigo acima e veja a diferenca.Uma outra forma de obter este mesmo resultado e com o seguinte comando: scanf(" %c",&ch);Observe o espaco entre a " e o %. Pode testar. Tem o mesmo efeito.E se o usuario cometer o erro de digitar mais de 2 caracter antes do enter? Faca o teste.Pequenas falhas na entradaA tecnica usada acima e pouco eficiente, como podemos ver com este ultimo teste.Para resolver pequenas erros como este, podemos limpar o buffer usando a funcao setbuf.A funcao setbuf preenche um buffer informado com um valor tambem informado. Vamos usar o exemplo do codigo do post sobre matrizes: setbuf(stdin, NULL);O comando acima preenche o buffer da entrada padrao (stdin) com o valor NULL.A entrada padrao, no nosso caso, e o buffer do teclado. E a palavra NULL e uma constante padrao do C, e significa um valor nulo (um byte com todos os bits 0). Um buffer preenchido com NULL e considerado limpo/vazio.Para pequenas falhas como uma ou duas teclas a mais esta tecnica funciona bem.E so colocar este comando na linha seguinte a funcao scanf original que le apenas um caracter, desta forma: scanf("%c", &ch); setbuf(stdin, NULL);Grandes falhas na entradaO buffer do teclado possui uma caracteristica interessante. As vezes ele armazena mais do que realmente 'mostra'. Experimente usar este novo codigo e digitar uns 15 caracteres ou mais, por exemplo, em cada entrada.A funcao setbuf limpa somente o que ela 've' armazenado no buffer, e logo depois desta limpeza, o buffer e novamente preenchido com o que estava 'oculto' e, desta forma, continua 'sujo'.Para resolver isto so com 'forca bruta' (e so modo de dizer, diga nao a violencia ;).Dentre as muitas formas de limpar a entrada usando 'forca bruta', eu, particularmente, gosto desta: while(getchar()!= '\n');O comando acima le os caracteres deixados no buffer, um a um, ate encontrar um enter, e despreza todos eles, inclusive o enter.Substitua o comando setbuf por este mostrado acima e faca o teste. Pode usar 'forca bruta' na hora de testar rsrs.Dando satisfacoes ao sistema operacionalExiste um outro detalhe no codigo que usei como exemplo neste post. E
o retorno da funcao main.Ate o momento nos temos usado o retorno das funcoes para retornar valores para variaveis ou indicar se a funcao foi bem sucedida. Para isto tenho usado 0 para indicar falha e 1 para indicar sucesso.A funcao main tambem possui um retorno. Em alguns codigos antigos voce vai encontrar a main declarada sem retorno ou com um retorno do tipo void. Mas a um bom tempo ela e declarada por padrao com um retorno do tipo inteiro.Este retorno indica para o sistema operacional se o programa foi concluido com ou sem falhas, ou seja, 0 indica que nao houveram falhas, e qualquer numero diferente de 0 indica alguma falha.Voce pode usar as constantes padroes EXIT_SUCCESS, que significa que nao houve falhas, ou EXIT_FAILURE, que indica alguma falha, ou usar os numeros diretamente. E muito comum se deparar com um return 0.System ou nao system?Muitas pessoas criticam o uso da funcao system (system("pause"); system("cls");).Um problema que vejo no uso da funcao system e que ela deixa o codigo dependente do sistema operacional.Um system("cls") funciona muito bem para 'limpar a tela' num ambiente Windows, mas nao vai funcionar no Linux, onde seria necessario usar um system("clear"). Existem formas de evitar isto usando bibliotecas externas, que funcionam nos dois ambientes. Como o nosso objetivo aqui e aprender o C padrao, vou continuar usando esta funcao para 'limpar a tela'. Se voce trabalha num ambiente Linux, faca a correcao quando necessario.Quanto ao system("pause");, e muito mais simples de resolver. Basta usar um getchar();. Esta funcao provocara uma pausa na execucao do codigo ate que um enter seja digitado, e funciona nos dois ambientes. Nao sera exibido "Digite qualquer tecla para continuar...", mas o resultado da execucao do programa podera ser visto normalmente. Procurarei usa-la daqui pra frente.Ate o proximo post.
Hoje vamos comecar a falar sobre um tipo de vetor especial: um vetor de vetores, a matriz.Vetor de vetores?Como ja sabemos, vetor e um agrupamento sequencial de variaveis do mesmo tipo. O mais comum deles e um deste tipo que voce esta lendo aqui: um vetor de caracteres (as famosas strings). Confirmando o conceito: varias letras (olha o mesmo tipo ai) em sequencia (olha a sequencia ai). Podemos ter vetores de varios tipos de dados, inclusive de outros vetores.Vou desenhar, assim voce vai entender melhor.Na figura acima, temos a representacao de como e armazenado em memoria um vetor que esta armazenando outros 4 vetores.Na verdade, esta divisoes internas nao existem(???). Este vetor de vetores, corresponde a um unico vetor com 16 elementos. Entao qual a razao dessa divisao?A resposta e PRATICIDADE.Lembra do lema 'Dividir para conquistar' que vimos aplicado as funcoes? Esta e a sua aplicacao nos vetores. E muito mais facil, visualizar cada pequeno bloco de cada vez do que todo o conjunto. Tanto e assim, que apesar deste vetor ser armazenado como na figura acima, nos referimos a ele, como se estivesse armazenado como na figura abaixo:Agora passamos a enxergar o nosso vetor de vetores na forma de linhas, onde cada 'linha' armazena um vetor.Olhando para esta representacao, podemos notar que os elementos dos vetores armazenados nas 'linhas', parecem formar 'colunas'. Entao, com o intuito de, mais uma vez, facilitar nossa visualizacao, chegamos a representacao do nosso vetor de vetores de uma forma, espero, conhecida: a matriz. Observe a figura abaixo:Esta e uma matriz de duas dimensoes (linhas e colunas, ou eixos x e y). Nao existem limites para o numero de dimensoes que uma matriz possa ter, embora quanto mais dimensoes, mais trabalhosa e a operacao com a matriz. As mais comuns sao as de duas e tres dimensoes (paginas, linhas e colunas, ou eixos x, y e z).Uma representacao de uma matriz de 3 dimensoes seria como na figura abaixo: Agora que ja vimos como uma matriz e armazenada e representada, vamos ver como e o seu uso em C.As matrizes e o CPara definir uma matriz em C, devemos informar o seu tipo, nome e os tamanhos de cada uma das suas dimensoes. <tipo> nome [tamanho_dimensao1] [tamanho_dimensao2]...[tamanho_dimensaoN];Para a matriz representada pelas figuras acima, uma matriz com 4 linhas e 4 colunas, que e do tipo inteiro, por exemplo, o comando seria: int matriz [4][4];Assim, para atribuir o valor do elemento da 2a linha e 3a coluna, por exemplo, a uma variavel inteira num, o comando e: num = matriz[1][2];Assim como os vetores, o indice base de uma matriz tambem e 0 (zero). Entao, a 2a linha e a de indice 1, e a 3a coluna e a de indice 2.Facil, nao.No proximo post veremos algumas operacoes com matrizes. Ate la. Como ja disse o objetivo do C em tratar o vetor de caracteres (string) de uma forma especial e para facilitar nossa vida. Vamos ver isto hoje.Funcoes especiais para um vetor especial.Existem uma serie de funcoes para trabalhar com strings em C que, em sua maioria, estao
Observe o seu uso: strcpy(nome, outro_nome);Aqui estamos copiando o conteudo de outro_nome em nome. Preste bastante atencao a isto, porque e muito facil confundir.Um detalhe importante e que alguns compiladores(acho que a maioria) permite copiar uma string maior em uma menor sem perda de dados. Na verdade a string menor e aumentada. Como isto e possivel? Vejamos a proxima funcao.Juntando strings (strcat)Como juntar 2 vetores afim de formar 1 unico vetor?Poderiamos criar um 3o vetor cujo tamanho fosse igual a soma dos 2, e copiar todos os itens de cada um dos 2 vetores.No caso de strings, temos uma funcao que faz isto para nos: strcat. Observe o seu uso: strcat(nome, outro_nome);Ela concatena (que palavra estranha rsrs; prefiro junta ou acrescenta) outro_nome no final de nome. O tamanho de nome sera a soma do tamanho anterior de nome com o tamanho de outro_nome.Existem outras funcoes especializadas para o trabalho com strings. A medida que elas forem necessarias para a solucao de algum problema proposto, nos falaremos sobre elas.Para encerrar, vou deixar um pequeno codigo para exemplificar as funcoes que vimos neste post.#include "stdio.h"#include "stdlib.h"#include "string.h" int main(){ char nome[21], outro_nome[21]; char igualdade[10], frase[16] = "As strings sao "; int tam_nome, tam_outro; printf("Digite um nome (no maximo 20 caracteres): "); gets(nome); tam_nome = strlen(nome); printf("Digite um outro nome (no maximo 20 caracteres): "); gets(outro_nome); tam_outro = strlen(outro_nome); if (strcmp(nome, outro_nome) == 0) strcpy(igualdade,"iguais"); else strcpy(igualdade,"diferentes"); printf("%s tem %d caracteres e %s tem %d caracteres\n", nome, tam_nome, outro_nome, tam_outro); strcat(frase, igualdade); printf("%s\n", frase); printf("Se juntar %s e %s ", nome, outro_nome); strcat(nome, outro_nome); printf("o novo tamanho de %s sera %d\n", nome, strlen(nome)); system("pause");}Viu como e facil?