liste con file

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
184
1
Buongiorno devo realizzare un programma che: determini se la matrice contiene almeno due righe che sono l’una la permutazione dell’altra. Stampare a schermo la risposta e le righe eventualmente individuate. Ho fatto cosi ma non mi viene stampata la riga con permutazione potete aiutarmi
main.c
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nodo.h"



int main(){
  FILE *fp;
  

  fp = fopen("dati.txt", "r");
    if(!fp) {
        perror("Errore");
        exit(0);
    
    }

  leggiFile(fp);
    
fclose(fp);
    
}

nodo.h
C:
#include <stdio.h>
#include <stdlib.h>

struct nodo{
  int n1;
  int n2;
  int n3;
  struct nodo *next;
};

int **allocaMatrice(int n, int m);
void stampaMatrice(int **marice, int n, int m);
void leggiFile(FILE *fp);
struct nodo *creaNodo(int n1, int n2, int n3);
struct nodo *inserisciInCoda(struct nodo *lista, int n1, int n2, int n3);
struct nodo *creaLista(struct nodo *lista, int **matrice, int n, int m);
void stampaLista(struct nodo *lista);
void confronta_righe(int** matrice, int n, int m);

funzioni.c
C:
#include <stdio.h>
#include <stdlib.h>
#include "nodo.h"

int **allocaMatrice(int n, int m){
  int **matrice = NULL;

  matrice = (int**)malloc(n*sizeof(int*));

  for(int i = 0; i < n; i++){
    matrice[i] = (int*)malloc(m*sizeof(int));
  }

  return matrice;
}

void stampaMatrice(int **matrice, int n, int m){
  for(int i = 0; i < n; i++){
    printf("\n");
    for(int j = 0; j < m; j++){
      printf("%d ", matrice[i][j]);
    }
  }
}

void leggiFile(FILE *fp){
  int **matrice, n, m;
    int riga;
  struct nodo *lista = NULL;

  fscanf(fp, "%d %d", &n, &m);

  matrice = allocaMatrice(n, m);

  for(int i = 0; i < n; ++i){
    for(int j = 0; j < m; ++j){
        fscanf(fp, "%d", &matrice[i][j]);
      }
    }

  stampaMatrice(matrice, n, m);
  lista = creaLista(lista, matrice, n, m);
    
   printf("\n Inserisci la riga da confrontare:\n");
   scanf("%d\n", &riga);
   confronta_righe(matrice,n,m);
 
  fclose(fp);

}

struct nodo *creaNodo(int n1, int n2, int n3){
  struct nodo *nuovoNodo = (struct nodo *)malloc(sizeof(struct nodo));
  if(!nuovoNodo) return NULL;

  nuovoNodo->n1 = n1;
  nuovoNodo->n2 = n2;
  nuovoNodo->n3 = n3;
  nuovoNodo->next = NULL;

  return nuovoNodo;
}

struct nodo *inserisciInCoda(struct nodo *lista, int n1, int n2, int n3){
  if(!lista) return creaNodo(n1, n2, n3);
  lista->next = inserisciInCoda(lista->next, n1, n2, n3);
  return lista;
}

struct nodo *creaLista(struct nodo *lista, int **matrice, int n, int m){
  for(int i = 0; i < n; i++){
    for(int j = 0; j < m; j++){
      lista = inserisciInCoda(lista, i, j, matrice[i][j]);
    }
  }
  return lista;
}


void stampaLista(struct nodo *lista){
  if(!lista)
      return;
  printf("(%d,%d,%d)\n", lista->n1, lista->n2, lista->n3);
  return stampaLista(lista->next);
}


void confronta_righe(int** matrice, int n, int m)
{
    int countRowEqual = 0;
    for (int i=0; i< n; ++i){
        for(int j=0; j<m; ++j)
            if(matrice[i][j] == matrice[i][j])
                if(j == m-1)
                    countRowEqual++;
        else
                        break;
                        }
            printf("Rows Equals are : %d",countRowEqual);
        }
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando

Hot: PS5 VS XBOX X/S?

  • Playstation 5

    Voti: 436 63.5%
  • XBOX Series X/S

    Voti: 251 36.5%

Discussioni Simili