Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lorrayne X Marcus

Programa Usando Matriz em ponteiros

Recommended Posts

Estou tendo problemas com esse programa, ele n mostra o numero maior e menor da matriz de forma adequada

 

#include<stdio.h>
#include<stdlib.h>
int main( )
{
    int **v, l, c, i=0, N;
    int mai=0, men=999999;
    printf("Informe o numero de linhas da matriz\n");
    scanf("%d", &l);
    printf("Informe o numero de colunas da matriz\n");
    scanf("%d", &c);
    v= (int **)malloc( l * sizeof(int *) );
    if (!(*v))
    {
        printf("Memoria insuficiente...\n");
        exit(1);
    }
    printf("Memoria alocada com sucesso\n");

    for (i = 0; i < l; i++)
    {
        v = (int *)malloc(c * sizeof(int));
        if (!(*v))
        {
            printf("Memoria insuficiente...\n");
            exit(1);
        }
    }
    printf("Memoria alocada com sucesso\n");
    N= l*c;
    printf("Informe %d valores\n", N);
    for (i = 0; i < N ; i++)
        scanf("%d", &v);
    for (i = 0; i < N; i++)
    {
        if(*v > mai)
        {
            mai= *v;
            printf("O maior eh: %d\n", mai);
        }
        else if(*v < men)
        {
            men= *v;
            printf("O menor eh: %d\n", men);
        }
    }
    for (i = 0; i < l; i++)
    {
        free(v);
    }
    free(v);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não verifica se o conteúdo do endereço de memória em **v é nulo. você verifica se o endereço de memória armazenado em ** nulo...
Faltou indexar a matriz na hora de alocar as linhas também.
O scanf p/ armazenar na matriz está errado.
 

#include<stdio.h>
#include<stdlib.h>
int main(void) {    
    int linhas, colunas;
    int **matriz;

    printf("Informe o numero de linhas da matriz\n");
    scanf("%d", &linhas);
    printf("Informe o numero de colunas da matriz\n");
    scanf("%d", &colunas);
    
    matriz = (int **) malloc( linhas * sizeof(int *) );
    
    if (matriz == NULL) {
        printf("Memoria insuficiente...\n");
        exit(1);
    }
    printf("Memoria alocada com sucesso\n");

    int i;
    for (i = 0; i < linhas; i++) {
        *(matriz + sizeof(int*)*i) = (int *)malloc(colunas * sizeof(int));
        if ((matriz + sizeof(int*)*i) == NULL) {
            printf("Memoria insuficiente...\n");
            free(matriz);
            exit(1);
        }
    }
    printf("Memoria alocada com sucesso\n");
    
    int N = linhas * colunas;
    printf("Informe %d valores\n", N);
    
    int max, min;
    int tmp;
    for (i = 0; i < N ; i++) {
        scanf("%d", (matriz + sizeof(int*)*i));
        tmp = *(matriz + sizeof(int*)*i);
        if (i == 0) {
            max = min = tmp;
        } else {
            if (max < tmp) {
                max = tmp;
            }
            
            if (min > tmp) {
                min = tmp;
            }
        }
    }
    
    printf("O maior número é %d. O menor número é %d.\n", max, min);
    
    free(matriz);
    
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qdo você lê o primeiro valor de uma lista, ele automaticamente é o mínimo e o máximo, já que você não sabe o que o usuário vai informar. Conforme você vai lendo outros números, se o mínimo que você identificou anteriormente é maior que o novo número lido, então o novo número é o mínimo. O mesmo raciocínio vale p/ o máximo.

matriz => endereco base na variável matriz (que aponta p/ um int *)
sizeof(int*) => tamanho em bytes de um int *

 

quando você multiplica o sizeof(int*) pelo i você está "caminhando linearmente em bytes" pela memória. Então o primeiro elemento está em matriz + sizeof(int*) * 0  (ou, usando notação de array, matriz[0][0])

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Pavolin9
      Bom dia, estou desenvolvendo um sistema bem simples de estoque onde os itens serao armazenados em uma matriz segue codigo:
          package main;          import java.io.Console;     import java.util.Arrays;     import java.util.Scanner;          public class IncluirItem{         public static void main(String[] args) {             String[][] itens = new String[2][5];             String[] campos = new String[7];             int opcao = 0;             int remover;             int verificar = 0;             int adcionar = 0;             int tamanho = 2;                          Scanner sc = new Scanner(System.in);                          campos [1] = "Nome";             campos [2] = "Codigo de barras";             campos [3] = "quantidade";             campos [4] = "validade";             campos [5] = "data de entrada";                          do {                 System.out.println("\n\n### Sistema de estoque - simplificado ###");                 System.out.println("=========================================");                 System.out.println("      |     1 - Adcionar itens   |");                 System.out.println("      |     2 - Excluir itens    |");                 System.out.println("      |     3 - Mostrar itens    |");                 System.out.println("      |     0 - Sair             |");                 System.out.println("=========================================\n");                                  System.out.println("Escolha uma opcao: ");                 opcao = sc.nextInt();                 System.out.print("\n");                                  switch (opcao) {                 case 1:                     System.out.println("Cadastro de itens: ");                     //Adciona itens                      for (int i = 0; i <2; i++) {                         System.out.println("Adcionar item? ");                         System.out.println("1 para sim \n2 para nao: ");                         adcionar = sc.nextInt();                         if (adcionar == 1) {                             System.out.printf("%d. item \n", (i+1));                             verificar = verificar + 1;                             for (int j=0; j < 5; j++) {                                     System.out.printf("%s ", campos[j+1]);                                 System.out.printf("= ", i,(j+1));                                 itens[i][j] = sc.next();                                                              }                             System.out.printf("\n");                         }                         else {                             break;                         }                     }                                              break;                 case 2:                     //Remove itens                     System.out.println("Exclusao de itens: ");                     if(verificar > 0) {                         for (int i = 0; i <2; i++) {                                 System.out.printf("%d. item \n", (i+1));                             System.out.printf("ID do produto= 00%d \n", (i+1));                             System.out.printf("\n");                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                     System.out.println("\nEscolha o numero do item a ser removido: \n");                     remover = sc.nextInt();                     for (int i = 0; i <2; i++) {                         if(remover == 2) {                         itens[i] = itens[i-1];                         }                     }                     break;                 case 3:                     //Mostra itens                     if(verificar > 0) {                                                      for (int i = 0; i <2; i++) {                                     if (verificar == 2) {                                 System.out.printf("%d. item \n", (i+1));                                 System.out.printf("ID do produto= 00%d \n", (i+1));                                 for (int j=0; j < 5; j++) {                                         System.out.printf("%s ", campos[j+1]);                                     System.out.printf("= %s \n", itens [i][j]);                                 }                                 System.out.printf("\n");                             }                             else {                                         itens = Arrays.copyOf(itens, tamanho - 1);                                         verificar = 0;                                         System.out.printf("%d. item \n", (i+1));                                         System.out.printf("ID do produto= 00%d \n", (i+1));                                         for (int j=0; j < 5; j++) {                                                 System.out.printf("%s ", campos[j+1]);                                             System.out.printf("= %s \n", itens [i][j]);                                         }                                         System.out.printf("\n");                                         break;                                 }                         }                     }                     else {                         System.out.println("Nenhum item listado!");                     }                                          break;                 default:                     System.out.println("Opção Inválida!");                     break;                 }             } while(opcao != 0);         }     }  
      Minha duvida é a seguinte, eu quero excluir uma posicao da matriz, exemplo: registrei dois itens, na coluna um e coluna dois da matriz e gostaria de remover a coluna um da lista, como realizo essa função, e outra coisa, eu gostaria de quando eu inserisse pela segunda vez algum item a matriz começasse na proxima possicao vazia, atualmente se eu pedir para inserir um novo item a matriz começa da primeira posicao e assim apaga os elementos ja inseridos.
       
    • Por Josues
      Bom dia!
      Gostaria de uma auxilio sobre concatenação de números inteiros em uma matriz bidimensional,
      estou fazendo um trabalho da faculdade e me deparei com essa barreira.
      No programa deve conter duas matrizes de entrada e uma de matriz que vai receber os valores concatenados das duas.
      A matriz é 1 por 2
      L = 1 e C = 2
      no resultado que será mostrado é ex:
      matriz 1 [0][0]: 1
      matriz 1 [0][1]: 1
      Matriz 2 [0][0]: 1
      Matriz 2 [0][1]: 0
       
      Matriz Resultado:
      11            10
      11            10
       
      tem como fazer essa com catenação com inteiros? estou no segundo semestre da faculdade é e uma atividade avaliativa..
       
       
    • Por P4870
      Sou estudante do 1º Ano do curso técnico em Informática do IFSP, e preciso de ajuda para fazer esse Algoritmo usando o visuAlg.
       
      01) Levando em consideração o início dos sistemas de informatização as informações eram armazenadas em arquivo do tipo texto. Analisando internamente estes arquivos pode-se notar que nada mais são do que matrizes, pois cada coluna representava um campo e cada linha uma tupla.
       
      Partindo desta informação construa uma matriz para armazenar o RA, CPF e um código para 40 alunos (no CPF digitar somente os números) e uma matriz que guardará 4 notas de 40 alunos e seus respectivos códigos, criando assim um tipo de relacionamento entre as duas matrizes. O primeiro CPF da matriz 1 representa o aluno que possui as 4 notas da primeira posição da segunda matriz. Após o preenchimento de todos os dados das 2 matrizes você deverá perguntar qual o tipo de consulta deverá ser realizada (1-RA, 2-CPF e 3-Código) se for escolhido a opção 1 deve ser solicitado o RA e pesquisar o mesmo na matriz e mostrar o RA, as 4 notas e a média das 4 notas do aluno, se a opção for 2 você deverá solicitar o CPF e também mostrar o CPF, as 4 notas e a média das 4 notas do aluno e se a opção for 3 você deverá solicitar o CÓDIGO e também mostrar o Código, as 4 notas e a média das 4 notas do aluno. Em ambas as consultas deve ser mostrado a situação do aluno (Aprovado quando a média for no mínimo 6; Recuperação quando a média for no mínimo 4 e não chegar a 6; e Reprovado se a média for inferior a 4).
       
      Ao mostrar cada resultado o sistema deve pedir se o usuário deseja fazer uma nova pesquisa.
       
      Caso deseje deve digitar S(SIM) para continuar ou N(NÃO) para finalizar.
    • Por pachecok
      Estou iniciando em programação e tenho um trabalho em C que devo:
       
      Construir um programa que leia uma matriz 7x7 de inteiros.
      Após a leitura, calcular o somatório apenas dos elementos abaixo destacados da matriz lida.
      Mostre, os elementos destacados e o somatório.
       
      A soma deve ser entre as posições da matriz refentes a imagem em anexo. 
      É esta a dificuldade que eu encontrei, não sei os passos para realizar esta soma em específico então provavelmente a minha tentativa abaixo foi bizarra. 
       
      Alguém poderia me ajudar? Agradeço desde já. 
       
      #include<stdio.h> #include<conio.h> #define linha 7 #define coluna 7 int main (void ) { int i, j, matriz[linha][coluna], result, soma; printf ("\nDigite valor para os elementos da matriz\n\n"); for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("\nElemento[%d][%d] = ", i, j); scanf ("%d", &matriz[ i ][ j ]); } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("%i", matriz[i][j]); } printf("\n"); } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ result=result+matriz[i][j]; } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ soma=soma+matriz[3][3]+matriz[4][2]+matriz[4][3]+matriz[4][4]+matriz[5][1]+matriz[5][2]+matriz[5][3]+matriz[5][4]+matriz[5][5]+matriz[6][0]+matriz[6][1]+matriz[6][2]+matriz[6][3]+matriz[6][4]+matriz[6][5]+matriz[6][6]; } } printf("\n\nA soma de todos valores da matriz: %d\n", result); printf("\n\nA soma dos valores solicitados: %d\n", soma); }  

    • Por Hashira do Vento
      O exercício pede o que eu faça um código com uma matriz, onde eu peça uma linha qualquer ao usuário, e nela será feito a soma ou média dos elementos contidos.
      O problema é na hora da decisão do usuário na hora de escolher entre média ou soma, escrevendo a letra inicial de uma dessa palavras em maiúsculo. O "If" simplesmente não funciona, e eu acho que seja essa minha dificuldade, pois quando tirei o if, a soma funcionou normalmente (com o código atual a soma fica igual a zero no printf final). E sim, eu pesquisei a fundo sobre o tipo char, mas mesmo assim não consegui resposta alguma para a solução do meu problema :/
      Segue o código:
      Obs: Claramente, o meu código não está terminado (ainda falta pôr a parte da média), a partir do momento em que eu solucionar esse problema principal, creio que conseguirei finalizá-lo sem mais contratempos.
       
      #include <stdio.h> #include <stdlib.h> #include <locale> int main (void){ setlocale (LC_ALL, "Portuguese"); float M [2][2], media; int lin, x, soma1, soma2; char op[5]; printf ("Preencha a matriz: \n"); for (int l = 0; l<2; l++) { //linha for (int c = 0; c<2; c++ ) { //coluna scanf ("%f", &M[l][c]); } } printf ("Que operação você quer? S ou M?\n"); //Entrada do char, escolha da operação scanf ("%s", op); printf ("Em qual linha da matriz a operação deve ser realizada?\n"); scanf ("%d", &x); for (int l = x; l==x; l++) { for (int c = 0; c<2; c++ ){ printf ("%f \n", M[l][c]);//só mostrando os numeros da linha (ignore) if (op=="S") //tenho quase certeza que o problema se encontra aqui soma1= M[l][c]+soma1; } } printf ("O resultado da soma deu %d", soma1); //e na hora de mostrar a soma, ela sempre aparece como zero }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.