Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Posts postados por vangodp

  1. #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;
    }
    
  2. 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 , 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;
    }
    
  3. 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;
    }
    
  4. 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...