Il primo esercizio sul compattamento di un vettore di interi non funziona correttamente, perché se si inserisce una sequenza con uno o più zeri iniziali, nel risultato finale è memorizzato uno zero in prima posizione. L'errore sta nel fatto che nel secondo ciclo for (quello interno) la condizione k
Io avevo risolto spostando la condizione “if(vett1[i]==0){ stop=1; }” tra il primo e il secondo ciclo for, e funziona anche così. È una buona soluzione?
Ciao, prima di tutto complimenti per le lezioni, sto imparando a programmare grazie a te. Volevo chiederti perchè, scrivendo un programma identico al tuo per il primo esercizio, se inserisco 0 come primo numero lo stampa comunque.Per il resto funziona benissimo. Grazie e complimenti ancora
@@ILGiullareDiCorte se metti minore uguale il ciclo fa un passaggio in più e scrive i valori agli indirizzi sbagliati, la miglior cosa è mettere un if da subito che fa eseguire il tutto solo se il valore è diverso da zero
al primo credo si possa migliorare una cosa per renderlo più efficiente cioè controllare se vett1[i] sia zero prima di cominciare il secondo for, nella soluzione del video invece visto che il controllo avrà sempre lo stesso esito quando cambia solo j viene ripetuto inutilmente j-1 volte per ogni i
io ho fatto quello sulle righe e colonne negative della matrice così: #include #include #define N 3 /* data una matrice di dimensione uguale a 10 righe per 10 colonne contenente numeri reali, scrivere un programma in linguaggio C per individuare se esistono righe o colonne composte solo da elementi negativi.*/ int main() { float matrix [N] [N]; int i; int j; int flag=0; int flag2=0; printf("inserire i dati nella matrice
Io l'ho svolto in questo modo e funziona in tutti i casi senza problemi, e la complessità computazionale del programma dovrebbe anche essere la minima possibile: #include // Costanti #define max 20 int main(int argc, const char * argv[]) { // Variabili int n; int v1[max]; int v2[max]; int i; int j; int p = 0; // tiene traccia della posizione del vettore 2 int add; // flag per stabilire se bisogna aggiungere o meno il valore di v1 in v2: 0=false, 1=true // Input printf("Quanti numeri vuoi inserire? "); scanf("%d", &n); for (i = 0; i < n; i++) { printf("Inserire il %d numero: ", (i+1)); scanf("%d", &v1[i]); v2[i] = 0; } // Elaborazione for (i = 0; i < n; i++) { add = 1; if (v1[i] != 0) { for (j = 0; j
Io ho fatto anche una piccola variante e ho impostato in modo diverso la verifica! #include #define R 3 #define C 3 int main(int argc, const char * argv[]){ float matrix[R][C]; int i, k; int th1;//flag int th2; printf("Inserisci i numeri nella matrice: "); for(i=0; i
IO HO SCRITTO QUESTO PROGRAMMA MA NON FUNZIONA, qualcuno saprebbe aiutarmi? #include #define max 20 int main() { int vett1[max],i,N; int vett_risultato[max]; int stop; int k; int j=0; printf("quanti numeri vuoi inserire: "); scanf("%d", &N);
ma fatto in questo modo avvrebbe cmq risolto seguendo la traccia, giusto?: /* data una matrice 10x10 contenete elementi reali, scrivere un programma per individuare se esistono riche e colonne composto solo da elementi negativi */ #include #define righe 3 #define colonne 3 int main(){ //variabili float matrice[righe][colonne]; int i,j; //input printf(" Inserisci i valori nella matrice: "); for(i=0;i
ESERCIZIO 2 Sia nell'analisi per righe sia in quella per colonne c'è un errore: il controllo dovrebbe essere if (mat[i][j] >= 0) {...} invece di if (mat[i][j] > 0) {...} Altrimenti se per esempio inserisco una riga/colonna come -1 0 0 -2 questa viene intesa come tutta negativa quando in realtà non lo è Inoltre, per ridurre notevolmente la complessità computazionale del programma, si potrebbe 1) inserire dei break sia nei controlli if (mat[i][j] >= 0) {...} e if (trovato == 1) {...} 2) avviare il ciclo for dell'analisi per colonne solo se valido == 0 In questo modo il numero di cicli compiuti si abbasserebbe notevolmente
La mia soluzione all'esercizio è questa, che riduce al minimo la complessità computazionale eseguendo 1 solo ciclo for "globale", invece di usarne 1 per analizzare le righe e 1 per analizzare le colonne #include // Costanti #define n 10 int main(int argc, const char * argv[]) { // Variabili float mat[n][n]; int i; int j; int allNegativeRow = 0; // flag che determina se la riga presenta soli numeri negativi: 0=false; 1=true int allNegativeCol = 0; // flag che determina se la colonna presenta soli numeri negativi: 0=false; 1=true // Input for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("Inserire mat[%d][%d]: ", i, j); scanf("%f", &mat[i][j]); } } // Stampa di verifica printf(" La matrice inserita è: "); for (i = 0; i < n; i++) { for (j= 0; j < n; j++) { printf("%f\t", mat[i][j]); } printf(" "); } // Elaborazione for (i = 0; i < n; i++) { allNegativeRow = 1; allNegativeCol = 1; for (j = 0; j < n; j++) { if (mat[i][j] >= 0) { allNegativeRow = 0; } if (mat[j][i] >= 0) { allNegativeCol = 0; } if (allNegativeRow == 0 && allNegativeCol == 0) { break; // interrompe for j } } if (allNegativeRow == 1 || allNegativeCol == 1) { break; // interrompe for i } } // Stampa if (allNegativeRow == 1 || allNegativeCol == 1) { printf(" La matrice contiene almeno una riga/colonna negativa.
"); } else { printf(" La matrice NON contiene righe/colonne negative.
Il primo l'ho fatto così, va bene? #include #define NMAX 20 int main(int argc, const char * argv[]) { int N = 0; int v1[NMAX]; int v2[2*NMAX]; int j = 0; printf("Quanti elementi vuoi inserire nel vettore? "); scanf("%d",&N); for (int i=0; i
ma fatto in questo modo avvrebbe cmq risolto seguendo la traccia, giusto?: /* data una matrice 10x10 contenete elementi reali, scrivere un programma per individuare se esistono riche e colonne composto solo da elementi negativi */ #include #define righe 3 #define colonne 3 int main(){ //variabili float matrice[righe][colonne]; int i,j; //input printf(" Inserisci i valori nella matrice: "); for(i=0;i
minuto 17.06...stampa di veriFIGA??? ora capisco perché è così bello il tuo corso ;)
Freddure per veri programmatori, fatti una vita
Il primo esercizio sul compattamento di un vettore di interi non funziona correttamente, perché se si inserisce una sequenza con uno o più zeri iniziali, nel risultato finale è memorizzato uno zero in prima posizione. L'errore sta nel fatto che nel secondo ciclo for (quello interno) la condizione k
Sono sceso apposta nei commenti per vedere se qualcuno ha menzionato: k
Io avevo risolto spostando la condizione
“if(vett1[i]==0){
stop=1;
}”
tra il primo e il secondo ciclo for, e funziona anche così. È una buona soluzione?
ESERCIZIO 1
C'è un problema nel codice: la variabile j viene inizializzata a 0, e al ciclo for(k=0; k
20:06 con le cuffie sono tipo saltato in aria dallo spavento. Ahahahah Bella spiegazione comunque!
come faccio a:
l'utente deve inserire una frase;
il programma deve convertire tutte le iniziali di ogni parola da minuscolo a maiuscolo? grazie
Ciao, prima di tutto complimenti per le lezioni, sto imparando a programmare grazie a te. Volevo chiederti perchè, scrivendo un programma identico al tuo per il primo esercizio, se inserisco 0 come primo numero lo stampa comunque.Per il resto funziona benissimo. Grazie e complimenti ancora
stesso problema
perchè se guardi bene il secondo ciclo for dell elaborazione , quello "for(k=0;k
devi impostare
@@ILGiullareDiCorte se metti minore uguale il ciclo fa un passaggio in più e scrive i valori agli indirizzi sbagliati, la miglior cosa è mettere un if da subito che fa eseguire il tutto solo se il valore è diverso da zero
Io l'ho scritto pari pari al tuo ma non funziona... Cosa può essere?
al primo credo si possa migliorare una cosa per renderlo più efficiente cioè controllare se vett1[i] sia zero prima di cominciare il secondo for, nella soluzione del video invece visto che il controllo avrà sempre lo stesso esito quando cambia solo j viene ripetuto inutilmente j-1 volte per ogni i
io ho fatto quello sulle righe e colonne negative della matrice così:
#include
#include
#define N 3
/* data una matrice di dimensione uguale a 10 righe per 10 colonne contenente
numeri reali, scrivere un programma in linguaggio C per individuare se esistono
righe o colonne composte solo da elementi negativi.*/
int main()
{ float matrix [N] [N];
int i;
int j;
int flag=0;
int flag2=0;
printf("inserire i dati nella matrice
");
for(i=0;i
ciao sei bravissimo.Se inserisco lo 0 per primo lo zero apparira' nel secondo vettore. Perche' ?
C'è un problema nel codice: la variabile j viene inizializzata a 0, e al ciclo for(k=0; k
Io l'ho svolto in questo modo e funziona in tutti i casi senza problemi, e la complessità computazionale del programma dovrebbe anche essere la minima possibile:
#include
// Costanti
#define max 20
int main(int argc, const char * argv[]) {
// Variabili
int n;
int v1[max];
int v2[max];
int i;
int j;
int p = 0; // tiene traccia della posizione del vettore 2
int add; // flag per stabilire se bisogna aggiungere o meno il valore di v1 in v2: 0=false, 1=true
// Input
printf("Quanti numeri vuoi inserire? ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Inserire il %d numero: ", (i+1));
scanf("%d", &v1[i]);
v2[i] = 0;
}
// Elaborazione
for (i = 0; i < n; i++) {
add = 1;
if (v1[i] != 0) {
for (j = 0; j
Io ho fatto anche una piccola variante e ho impostato in modo diverso la verifica!
#include
#define R 3
#define C 3
int main(int argc, const char * argv[]){
float matrix[R][C];
int i, k;
int th1;//flag
int th2;
printf("Inserisci i numeri nella matrice:
");
for(i=0; i
IO HO SCRITTO QUESTO PROGRAMMA MA NON FUNZIONA, qualcuno saprebbe aiutarmi?
#include
#define max 20
int main() {
int vett1[max],i,N;
int vett_risultato[max];
int stop;
int k;
int j=0;
printf("quanti numeri vuoi inserire:
");
scanf("%d", &N);
for(i=0;i
ma fatto in questo modo avvrebbe cmq risolto seguendo la traccia, giusto?:
/*
data una matrice 10x10 contenete elementi reali, scrivere un programma per
individuare se esistono riche e colonne composto solo da elementi negativi
*/
#include
#define righe 3
#define colonne 3
int main(){
//variabili
float matrice[righe][colonne];
int i,j;
//input
printf("
Inserisci i valori nella matrice:
");
for(i=0;i
ESERCIZIO 2
Sia nell'analisi per righe sia in quella per colonne c'è un errore: il controllo dovrebbe essere
if (mat[i][j] >= 0) {...}
invece di
if (mat[i][j] > 0) {...}
Altrimenti se per esempio inserisco una riga/colonna come -1 0 0 -2 questa viene intesa come tutta negativa quando in realtà non lo è
Inoltre, per ridurre notevolmente la complessità computazionale del programma, si potrebbe
1) inserire dei break sia nei controlli if (mat[i][j] >= 0) {...} e if (trovato == 1) {...}
2) avviare il ciclo for dell'analisi per colonne solo se valido == 0
In questo modo il numero di cicli compiuti si abbasserebbe notevolmente
La mia soluzione all'esercizio è questa, che riduce al minimo la complessità computazionale eseguendo 1 solo ciclo for "globale", invece di usarne 1 per analizzare le righe e 1 per analizzare le colonne
#include
// Costanti
#define n 10
int main(int argc, const char * argv[]) {
// Variabili
float mat[n][n];
int i;
int j;
int allNegativeRow = 0; // flag che determina se la riga presenta soli numeri negativi: 0=false; 1=true
int allNegativeCol = 0; // flag che determina se la colonna presenta soli numeri negativi: 0=false; 1=true
// Input
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("Inserire mat[%d][%d]: ", i, j);
scanf("%f", &mat[i][j]);
}
}
// Stampa di verifica
printf("
La matrice inserita è:
");
for (i = 0; i < n; i++) {
for (j= 0; j < n; j++) {
printf("%f\t", mat[i][j]);
}
printf("
");
}
// Elaborazione
for (i = 0; i < n; i++) {
allNegativeRow = 1;
allNegativeCol = 1;
for (j = 0; j < n; j++) {
if (mat[i][j] >= 0) {
allNegativeRow = 0;
}
if (mat[j][i] >= 0) {
allNegativeCol = 0;
}
if (allNegativeRow == 0 && allNegativeCol == 0) {
break; // interrompe for j
}
}
if (allNegativeRow == 1 || allNegativeCol == 1) {
break; // interrompe for i
}
}
// Stampa
if (allNegativeRow == 1 || allNegativeCol == 1) {
printf("
La matrice contiene almeno una riga/colonna negativa.
");
}
else {
printf("
La matrice NON contiene righe/colonne negative.
");
}
return 0;
}
Il primo l'ho fatto così, va bene?
#include
#define NMAX 20
int main(int argc, const char * argv[]) {
int N = 0;
int v1[NMAX];
int v2[2*NMAX];
int j = 0;
printf("Quanti elementi vuoi inserire nel vettore?
");
scanf("%d",&N);
for (int i=0; i
ma fatto in questo modo avvrebbe cmq risolto seguendo la traccia, giusto?:
/*
data una matrice 10x10 contenete elementi reali, scrivere un programma per
individuare se esistono riche e colonne composto solo da elementi negativi
*/
#include
#define righe 3
#define colonne 3
int main(){
//variabili
float matrice[righe][colonne];
int i,j;
//input
printf("
Inserisci i valori nella matrice:
");
for(i=0;i
risulta errato se la sequenza di numeri che inserisci non è 'in ordine' (per capirci 1,2,3,4...)