Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. Más que erro você tem? Si você estiver compilando esse código em C certamente ele não funcione devido a que C não suporta tipo bool. A solução seria incluir a livraria stdbool.h igual modo não sei o que você quer fazer assim que não posso ajudar muito.
  2. Isso é por que você acha que ele está reservado na memoria assim: +-----+-----+-----+-----+ |Byte0|Byte1|Byte2|Byte3| +-----+-----+-----+-----+ | a[0]| a[1]| B | C | +-----+-----+-----+-----+ Más na realidade ele esta assim: +-----+-----+ |Byte0|Byte1| +-----+-----+ | a[0]| a[1]| +-----+-----+ | B | C | +-----+-----+ O dato B compartilha memoria com o dado a[0], e o dado C com A[1]. Supondo que todos ocupam 1Byte em memoria. Como disse no coment do seu programa: "eles compartilham memoria". Más a pega é que você não pode usar ele para duas coisas ao mesmo tempo. Para que você entenda melhor imaginamos que temos a seguinte união: union unEjemplo { int A; //4Bytes char B; //1Byte float C;//8Bytes } UnionEjemplo; Então vamos tomar que em um determinado computador um int ocupa 4Bytes, um char ocupa 1Byte e um float ocupa 8Bytes(Esses podem variar de tamanho dependendo de fatores como compilador, SO etc). Em uma estrutura normal ele estaria representado em memoria de esta forma: +------+------+------+------+------+------+------+------+------+------+------+------+------+ |Byte00|Byte01|Byte02|Byte03|Byte04|Byte05|Byte06|Byte07|Byte08|Byte09|Byte10|Byte11|Byte12| +------+------+------+------+------+------+------+------+------+------+------+------+------+ | A | B | C | +------+------+------+------+------+------+------+------+------+------+------+------+------+ ...Ocupando a soma de todos seus membros int tamanhoEstructura = sizeof(A)+sizeof©+sizeof© //Depende também do alinhamento de Bytes ou em inglês Byte Align(Buscar en google). Más em uma união eles seriam assim: +------+------+------+------+------+------+------+------+ |Byte00|Byte01|Byte02|Byte03|Byte04|Byte05|Byte06|Byte07| +------+------+------+------+------+------+------+------+ | A | +------+------+------+------+ | B | +------+------+------+------+------+------+------+------+ | C | +------+------+------+------+------+------+------+------+ int tamanhoUnion = sizeof©; //C é o tipo de dado de maior tamanho de todos nesse exemplo, por isso a união vai levar o tamanho dele e todos os dados vão compartilhar essa mesma memoria. O Byte 0 do charB estaria compartilhando do Byte 0 de intA(ocupariam a mesma memoria) e vice versa. Os Bytes 0,1,2 e 3 de floatC compartilham o mesmo espaço que o Byte 0,1,2 e 3 de intA e vice versa. Todos os Bytes 0 dos membros compartilham o mesmo espaço. Acho que da para entender. Então... no seu exemplo: +-----+-----+ |byte0|byte1| +-----+-----+ | a[0]| a[1]| +-----+-----+ | B | C | +-----+-----+ Me permita fazer uma analogia: Os dados A[0],A[1],B e C vamos pensar que eles são carros, e que seus nomes são marcas ou modelos. Eles são carros muito evoluídos, são quase mágicos, pois eles possuem uma característica que nenhum carro convencional tem. Seu porta malas! Esse porta malas ocupa o mesmo espaço tempo(memoria) que do seus parceiros do tamanho de 1Byte =D. Por exemplo: o carro A[0] comparte um porta-malas do tamanho de 1Byte com seu parceiro carro B, se eu puser qualquer coisa que ocupa um Byte em qualquer dos porta malas de um de esses 2 carros, automaticamente o outro vai ter o mesmo conteudo no seu porta malas. kkkk Si eu puser um caractere 'x' no porta malas de A[0], B também vai ter ese 'x' no seu porta malas. Capiche? Os carros A[0] e B compartilham esse revolucionário porta malas entre si, e A[1] e C também. Ok feita a analogia o que aconteceu foi que você colocou no porta malas dos carros B(que compartilha com A[0]) e C(que compartilha com A[1])os dados 'c' e 'd'. Então si B='c' e C='d' os porta malas de ficam A[0]='c' e A[1]='d'. Em linguagem de programação fica ((B='c') == (A[0]='c')) e ((C='d')== (A[1]='d')) Por que compartilham memoria. As uniões já não são amplamente utilizadas por que se criaram para computadores que continham pouca memoria RAM já que como podemos ver "compartilham" a mesma memoria RAM, más seu uso é muito complexo e pouco recomendado em entornos de trabalhos atuais dado que qualquer maquina hoje em dia tem ao menos 2gigas ou más de RAM. Más aprender sobre unioes te pode ajudar em muitas coisas como por exemplo sockts que usam algumas uniões algo complicadas para estabelecer comunicação entre 2 ou más computadores. Si você quiser um conselho não esta de mais você aprender uniões, más eu não perderia demasiado tempo com elas já que pouco uso vão ter nos dias que correm atualmente. XD Sorte: :lol:
  3. #include<stdio.h> #include<stdlib.h> int main() { //variaveis int numvote, i=0, cod=0, c1=0, c2=0, c3=0, c4=0, nu=0, br=0; float rca1=0, rca2=0, rca3=0, rca4=0, rca5=0, rca6=0; printf ( "Entre com o numero total de votos a serem registrados\n" ); scanf ( "%d", &numvote ); while ( i <= 10 ) { printf ( "Entre com o codigo do candidato(1,2,3,4), 5 para nulo e 6 para branco\n" ); scanf ( "%d", &cod ); switch ( cod ) { case '1': c1++; //más facil de entender. si vc tiver variaveis c1,c2,c3,c4... Procure usar arrays c[4] más facil. =) i++; break; case '2': c2++; i++; break; case '3': c3++; i++; break; case '4': c4++; i++; break; case '5': nu++; i++; break; case '6': br++; i++; break; default: break; } } system ( "pause" ); rca1 = numvote % 100 + c1; rca2 = numvote % 100 + c2; rca3 = numvote % 100 + c3; rca4 = numvote % 100 + c4; rca5 = numvote % 100 + nu; rca6 = numvote % 100 + br; printf ( "O numero de votos do candidato 1 foi: %d e a porcentagem foi: %f\n", c1, rca1 ); return 0; }
  4. você esta fazendo muito mal nessa parte: int A[1000], B[1000], i, j; A = -1; B[j] = -1; Quando você guarda -1 na posição i de A e posiçao j de B nessa hora você não sabe que valor podem conter tanto i como j, i pode ser 500000 e fazer o seu programa sair de rango já que você só declarou A como 1000 inteiros. Para solventar esse problema de un valor inicial a i, algo assim: int A[1000], B[1000], i=0, j=0; Quando você criar uma funçao que espera um array de esta forma: void imprime_elementos ( int v[] ), tenha em conta que int v[] tem o comportamento de um ponteiro, então você deve enviar a ele algo como v e não v. enviar v não é ilegal porem a função espera um ponteiro a inteiro que nada más é que a primeira posição de um array, más podemos passar a 2º, 3º ou a que quiser, mas tenha isso claro. As linhas 91, 94, 97 e 100 dizem que v não foi declarado, por tanto você esta passando um array a uma função e ele não foi declarado dentro de main, e si fosse pouco você esta passando ele errado. Lembre-se do que eu falei no apartado anterior sobre si uma função espera int v[], você pode enviar A /*aponta o inicio do array*/ ou A[3] por exemplo, mas dessa ultima forma vai dar avisos, porque não esta pensado para usar desta forma. Esse código esta arrumado para que compile corretamente. Resta você ir solucionando o as questões que se propõe. #include<stdio.h> void adiciona_elementos ( int v[] ) { /*int v[] deve valer tanto para os casos em que adicionamos ao A quanto ao B*/ int i=0, e=0, adiciona = 0, j = 0, N=0, x=0; scanf ( "%d", &N ); for ( i = 0; i < N; i++ ) { scanf ( "%d", &x ); adiciona = 1; for ( e = 0; e < 1000; e++ ) { if ( v[e] == x ) { adiciona = 0; break; } } if ( ( adiciona == 1 ) && ( v[j] == -1 ) ) { v[j] = x; j++; } } } void remove_elementos ( int v[] ) { /*a mesma coisa sobre o int v[]*/ int i=0, N=0, x=0, e=0; scanf ( "%d", &N ); for ( i = 0; i < N; i++ ) { scanf ( "%d", &x ); for ( e = 0; e < 1000; e++ ) { if ( v[e] == x ) v[e] = -1; } } } int BubbleSort ( int v[], int tam ) { int i=0, j=0, aux=0; for ( i = tam - 1; i > 0; i-- ) { for ( j = 0; j < i; j++ ) { if ( v[j] > v[j + i] ) { aux = v[j]; v[j] = v[j + 1]; v[j + 1] = aux; } } } return 0; } void imprime_elementos ( int v[] ) { int i=0, j=0, A[1000], B[1000]; //###j nao se esta usando BubbleSort ( A, 1000 ); /*organize os elementos do vetor A*/ BubbleSort ( B, 1000 ); /*e também do vetor B*/ for ( i = 0; i < 1000; i++ ) { if ( v[i] != -1 ) /*só imprima os elemntos que forem diferente de -1*/ printf ( "%d\n", v[i] ); } } void igualdade ( int v[] ) { int i=0, A[1000], B[1000]; //aqui nao faz falta i=0 mas ponho mesmo assim ;) BubbleSort ( v, 1000 ); /*antes de comparar os dois conjuntos, ordene os mesmos para que identifique logo se são iguais ou diferentes*/ for ( i = 0; i < 1000; i++ ) if ( A[i] == B[i] ) printf ( "Conjuntos iguais.\n" ); else printf ( "Conjuntos diferentes.\n" ); } int main () { //mostra aviso que A e B nao se usam int A[1000]={0}, B[1000]={0}, i=0, j=0; // Com A[1000]={0} damos a todo o array um valor nulo. igual que j e i char opcao, conjunto; A[i] = -1; B[j] = -1; scanf ( " %c", &opcao ); scanf ( " %c", &conjunto ); switch ( conjunto ) { case 'A':/*no caso da ação ser para o conjunto A*/ // A[i]; //<-para que serve isso??? Si nao estiver pronto deixe assim comentado para evitar erros break; case 'B':/*se a ação for para o conjunto B*/ // B[j]; //<-para que serve isso??? break; default: printf ( "Comando invalido. Entre com outro comando, ou 'F' para terminar." ); } do { switch ( opcao ) { case 'A': // adiciona_elementos ( v[] ); /*adicione elementos em v[] que pode ser tanto v[A] quanto v[B]*/ break; case 'R': // remove_elementos ( v[] ); break; case 'p': // imprime_elementos ( v[] ); break; case 'e': // igualdade ( v[] ); break; case 'F': case 'f': break; default: printf ( "Comando invalido. Entre com outro comando, ou 'F' para terminar." ); } } while ( ( opcao != 'F' ) && ( opcao != 'f' ) ); return 0; }
  5. Então o melhor é que essa aplicação se comunique mediante socketes y obtenha a hora do seu servidor. você pode ler também sobre NTP: http://pt.wikipedia.org/wiki/Network_Time_Protocol.
  6. si você tiver 3 variáveis dia/mês/ano do tipo string. você pode enviar a um programa C++ usando uma chamada ao sistema e os parâmetros da função main: O código que vai no arquivo index.php: <?php $dia = "29"; $mes = "feverero"; $ano = "2015"; system ("programa.exe $dia $mes $ano "); ?> E junto você deve ter esse programa já compilado(programa.exe): #include <iostream> #include <cstdio> using namespace std; int main (int argc, char **argv){ printf( "%s/%s/%s", argv[0], argv[1], argv[2] ); cin.ignore(); return 0; }
  7. Busque sobre analisadores ou parser de código php para C++. você também pode usar expressões regulares da biblioteca(regex) do novo standard C++11 para acessar a hora no arquivo. Da uma olhada aqui: http://www.cplusplus.com/reference/regex/ https://www.ibm.com/developerworks/community/blogs/fd26864d-cb41-49cf-b719-d89c6b072893/entry/trabalhando_com_express_C3_B5es_regulares_em_c_11?lang=en
  8. Isso é por que a memoria é em linha e não bidimensional. O perigo é você sair pelo inicio ou pelo final. si você tiver uma matriz[3][3]: [0][1][2] [3][4][5] [6][7][8] Na memoria ela esta representada assim: [0][1][2][3][4][5][6][7][8] Si você sair pelo 5 você vai parar no 6, si você sair pelo 3 você vai parar no 2. você ate pode aceder a todas as casinhas assim: matriz[0][0] <-inicio matriz[0][1] matriz[0][2] matriz[0][3] matriz[0][4] matriz[0][5] matriz[0][6] matriz[0][7] matriz[0][8] <-final pode imprimir com cout o printf como si de um array se trata-se. cout << matriz[0][8] << endl; Então não saia pelos extremos por que ai você esta invadindo memoria não reservada. Pense que a memoria ram é uma avenida muito grande cheia de casas iguais todas elas numeradas. Uma matriz é uma forma diferente de representar a memoria, mas a memoria e em linha, lembre-se disso.
×
×
  • Criar Novo...