Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C]Minimo complementare

    Ciao,
    devo fare un programma che inserita una matrice quadrata calcoli il minimo complementare.
    Il problema è che il compilatore mi da 2 problemi sulla funzione mc:
    1) incompatible type for argument 1 of `mc'
    2) conflicting types for 'mc'
    3) previous declaration of 'mc' was here
    codice:
    #include<stdio.h>
    void mc(float, int, int, int); 
    int main()
    {
      float mat[100][100];
      int x,y,i,er,ec;
      printf("Inserisci il numero di righe e colonne della matrice quadrata:");
      scanf("%d", &i);
      for(y=0;y<i;y++)
      {
          for(x=0;x<i;x++)
          {
             printf("Inserisci il valore della matrice in posizione %d %d ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      for(y=0;y<i;y++)//Matrice prima di essere modificata
      {
          printf("\n");
          for(x=0;x<i;x++)
              printf("%f", mat[x][y]);
      }
      printf("Inserisci il numero della riga che vuoi eliminare");
      scanf("%d", &er);
      printf("Inserisci il numero della colonna che vuoi eliminare");
      scanf("%d", &ec);
      mc(mat,er,ec,i); 
      for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
      {
          printf("\n");
          for(x=0;x<i-1;x++)
              printf("%f", mat[x][y]);
      }
      system("pause");
      return 0;
    }
    //Implementazione della funzione per il minore complementare
    void mc(float matrice [][100], int eriga, int ecolonna, int i)
    { 
         float matriceap [100][100];
         int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
         for(y=0;y<i;y++)
         {
          for(x=0;x<i;x++)
          {
             if(x!=eriga-1 && y!=ecolonna-1)
             {
                 matrice[x][y]=matriceap[j][k];
                 j++;
                 k++;
             }
          }//chiusura for della x 
         }//chiusura for della y
         for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
         {
          for(x=0;x<i-1;x++)
          {
            matrice[x][y]=matriceap[x][y];
          }
         }
    }
    Ciao e grazie in anticipo dell'aiuto
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    La prima cosa che mi è saltata all'occhio è che nel prototipo come primo argomento ti aspetti un float...nel main gli dai una matrice di float...coerentemente con la funzione che hai scritto,quindi devi modificare il prototipo della funzione

  3. #3
    Grazie,
    non l'avevo visto, ora il compilatore non mi da più errori di compilazione.
    codice:
    #include<stdio.h>
    void mc(float[][], int, int, int);
    int main()
    {
      float mat[100][100];
      int x,y,i,er,ec;
      printf("Inserisci il numero di righe e colonne della matrice quadrata:");
      scanf("%d", &i);
      for(y=0;y<i;y++)
      {
          for(x=0;x<i;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      for(y=0;y<i;y++)//Matrice prima di essere modificata
      {
          printf("\n");
          for(x=0;x<i;x++)
              printf("%4.2f ", mat[x][y]);
      }
      printf("\nInserisci il numero della riga che vuoi eliminare: ");
      scanf("%d", &er);
      printf("Inserisci il numero della colonna che vuoi eliminare: ");
      scanf("%d", &ec);
      mc(mat,er,ec,i);
      for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
      {
          printf("\n");
          for(x=0;x<i-1;x++)
              printf("%4.1f ", mat[x][y]);
      }
      printf("\n");
      system("pause");
      return 0;
    }
    //Implementazione della funzione per il minore complementare
    void mc(float matrice [][100], int eriga, int ecolonna, int i)
    {
         float matriceap [100][100];
         int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
         for(y=0;y<i;y++)
         {
          for(x=0;x<i;x++)
          {
             if(x!=eriga-1 && y!=ecolonna-1)
             {
                 matrice[x][y]=matriceap[j][k];
                 j++;
                 k++;
             }
          }//chiusura for della x 
         }//chiusura for della y
         for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
         {
          for(x=0;x<i-1;x++)
          {
            matrice[x][y]=matriceap[x][y];
          }
         }
    }
    Il problema è che la nuova matrice è composta solo da zeri, cosa devo modificare?

    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    La risposta è semplice...nella funzione assegni alla matrice i valori della matrice d'appoggio...non riesco a capire ancora il motivo :/
    Probabilmente quando dichiari un qualsiasi tipo di variabili il tuo compilatore le inizializza a 0,e quando fai queste istruzioni:
    codice:
    matrice[x][y] = matriceap[x][y]
    non fai altro che copiare degli 0

  5. #5
    Giusto,
    ho modificato il codice
    codice:
    #include<stdio.h>
    void mc(float[][], int, int, int);
    int main()
    {
      float mat[100][100];
      int x,y,i,er,ec;
      printf("Inserisci il numero di righe e colonne della matrice quadrata:");
      scanf("%d", &i);
      for(y=0;y<i;y++)
      {
          for(x=0;x<i;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      for(y=0;y<i;y++)//Matrice prima di essere modificata
      {
          printf("\n");
          for(x=0;x<i;x++)
              printf("%4.2f ", mat[x][y]);
      }
      printf("\nInserisci il numero della riga che vuoi eliminare: ");
      scanf("%d", &er);
      printf("Inserisci il numero della colonna che vuoi eliminare: ");
      scanf("%d", &ec);
      mc(mat,er,ec,i);
      for(y=0;y<i-1;y++)//Matrice dopo essere stata modificata
      {
          printf("\n");
          for(x=0;x<i-1;x++)
              printf("%4.1f ", mat[x][y]);
      }
      printf("\n");
      system("pause");
      return 0;
    }
    //Implementazione della funzione per il minore complementare
    void mc(float matrice [][100], int eriga, int ecolonna, int i)
    {
         float matriceap [100][100];
         int x,y,j=0,k=0; //j è il numero della riga della matrice d'appoggio - k il numero della colonna della matrice d'appoggio
         for(y=0;y<i;y++)
         {
          for(x=0;x<i;x++)
          {
             if(x!=eriga-1 && y!=ecolonna-1)
             {
                 matriceap[j][k]=matrice[x][y]; 
                 j++;
                 k++;
             }
          }//chiusura for della x 
         }//chiusura for della y
         for(y=0;y<i-1;y++)//copiatura della matrice dappoggio nella matrice originale
         {
          for(x=0;x<i-1;x++)
          {
            matrice[x][y]=matriceap[x][y];
          }
         }
    }
    Ora il problema è che metà dei numeri sono uguali a zero e metà no.
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Potresti prima dirmi cosa deve fare il programma...perchè non so proprio cosa sia il minimo complementare poi vedrò di aiutarti..

  7. #7
    Matrice originale
    1 2 3
    4 5 6
    7 8 9
    L'utente dice di eliminare la riga e la colonna che vuole (esempio riga 1 e colonna 2)
    4 6
    7 9

    Quindi ha eliminato la riga con 1 2 3 e la colonna che conteneva 2
    5
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  8. #8
    Con la colonna che conteneva:
    2
    5
    8

    Questo codice mi servirà più avanti per calcolare il determinate di una matrice

    Scusami se non ti ho detto in anticipo cosa doveva fare il codice
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Ok adesso ho capito...comunque mea culpa dovevo capirlo dal codice.. comunque appena ho un attimo ci do un occhiata

  10. #10
    OK
    Grazie mille dell'aiuto
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.