argcv

codes and stuff

Archive for maio 2012

A função system()

leave a comment »

Uma função bastante interessante que temos em C é system(), cujo protótipo encontra-se no arquivo-cabeçalho stdlib.h e é o que se segue:

int system (const char *string)

Com ela, você pode chamar comandos do sistema em seu programa. Por exemplo, a seguinte chamada

system ("dir");

devolve o conteúdo da pasta na qual o seu programa está.

Para exemplo simples, fiz um programinha que faz uso do pacman do Arch Linux através de system(). Confira.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
    char nome[100];
    char comando[200] = "sudo pacman -S ";

    printf("Digite o nome do programa: ");
    gets(nome);

    strcat(comando, nome);

    printf("\n");

    system(comando);
}

É fácil perceber que com uma simples alteração no array comando podemos adaptar o programa para funcionar em outras distribuições (em Debian e derivados, poderíamos usar “sudo apt-get install “, por exemplo).

Até mais.

Anúncios

Written by rntreis

maio 31, 2012 at 11:33 am

Publicado em C, dicas, programação

Cena de “A Dog’s Life”

leave a comment »

Um pouco da sétima arte, com Charles Chaplin.

 

😀

Written by rntreis

maio 31, 2012 at 11:09 am

Publicado em cinema

Multiplicação de matrizes

leave a comment »

Para quebrar o silêncio, compartilho uma função em C que criei que multiplica matrizes. Já está dentro do programinha de teste que se segue, com duas matrizes a serem multiplicadas e o for que imprime a matriz resultante.

Repare que eu utilizo calloc ao invés de malloc. Isso porque, ao contrário de malloc, que devolve um ponteiro para uma sequência de “lixos” na memória, calloc já devolve um ponteiro para uma sequência de zeros. Isso é uma vantagem para mim, pela lógica que utilizei e que pode ser verificada na função.
 

 /*
 * Algoritmo de multiplicação de matrizes.
 * Escrito por Renato R. Leme em 22/05/2012.
 * e-mail: rntreisleme@gmail.com
 * site: https://argcv.wordpress.com */

#include <stdio.h>
#include <stdlib.h>

int **mmatriz (int l1, int c1, int l2, int c2, int A[l1][c1], int B[l2][c2]);

void main() {
    int i, j;
    int A[2][3] = {{2, 5, 9}, {3, 6, 8}};
    int B[3][2] = {{2, 7}, {4, 3}, {5, 2}};
    int **AB;

    if (!(AB = mmatriz (2, 3, 3, 2, A, B)))
        printf("Matrizes inválidas!\n");

    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) printf("%d ", AB[i][j]);
            printf("\n");
    }
}

/* Esta função recebe os inteiros l1, c1, l2, c2, e as matrizes A[l1][c1] e B[l2][c2].
 * Se c1 = l2, é devolvida uma matriz AB[l1][c2], tal que AB = A*B. Caso c1 != l2,
 * a função devolve 0. */

int **mmatriz (int l1, int c1, int l2, int c2, int A[l1][c1], int B[l2][c2]) {
    if (c1 != l2) return 0;
    else {
        int linha = 0, coluna = 0, i, j;
        int **AB;
        AB = calloc (l1, sizeof(int));
        for (i = 0; i < c2; i++) *(AB+i) = calloc (c2, sizeof(int));

        for (linha = 0; linha < l1; linha++) {
            for (i = 0; i < c2; i++) {
                for (j = 0; j < c1; j++) AB[linha][coluna] += (A[linha][j] * B[j][coluna]);
                coluna++;
            }
            coluna = 0;
        }

        return AB;
    }
}

Até mais!

Written by rntreis

maio 22, 2012 at 7:28 pm

Publicado em C