|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
[C] array+array=...?
Buonasera a tutti
Proseguivo con gli esercizi che il professore di programmazione ci ha assegnato, e (grazie a voi) sembrava andare tutto per il meglio, ormai le funzioni le ho imparate.. quando arrivo a questo esercizio: Realizzare una function di tipo main e function merge che esegua la fusione (merge) di due array ordinati... Non so se perchè ho il cervello fuso o meno, ma mi sembra più difficile del normale Vi posto quello che ho fatto fin'ora: Codice:
#include <stdio.h>
#include <stdlib.h>
int merge (int *a, int *b, int n, int t);
main ()
{
int *a, *b, *c, n, t, s, i, j, k;
printf ("Inserisci il numero di elementi contenuti nel primo array\n");
scanf ("%d", &n);
a=(int*)malloc(n*sizeof(int));
printf ("Inserisci il numero di elementi contenuti nel secondo array\n");
scanf ("%d", &t);
b=(int*)malloc(t*sizeof(int));
for (i=0; i<n; i++) {
printf ("Inserisci l'elemento n.%d dell'array A\n", i+1);
scanf ("%d", &a[i]); }
for (j=0; j<t; j++) {
printf ("inserisci l'elemento n.%d dell'array B\n", j+1);
scanf ("%d", &b[j]); }
merge (a, b, n, t);
printf ("La fusione dei due array ha generato un terzo array contenente i seguenti elementi\n");
for (k=0; k<s; k++) {
printf ("%d) %d", k+1, c[k]); }
system ("pause");
free (a);
free (b);
}
int merge (int *a, int *b, int n, int t) {
int s= n+t;
int i, j;
int k=-1;
int *c;
for (i=0; i<n; i++) {
for (j=0; j<t; j++) {
if (a[i]<b[j]) {
a[i]=c[k++]; }
else { b[j]=c[k++]; }
}
}
}
Vi ringrazio in ogni caso ^^ buona serata! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Questo di sicuro: si chiama funzione, se esiste un nome italiano ci sarà un perché. ![]() ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
ho letto e riletto il tuo messaggio ma non capisco
devo iniziare un altro ciclo for per scorrere C insieme ad A e B? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
In più, se anche la merge() funzionasse, non ti sei assicurato che il puntatore faccia riferimento alla stessa memoria in cui vuoi scrivere: quindi se tu allocassi la memoria per l'array dentro merge() poi la main() non riceverebbe le modifiche. Devi quindi allocarla nella main(), passare il puntatore come parametro alla merge(), e da lì riempirla.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
vorrei sdrammatizzare un pochino
a domanda rispondo domanda : [C] array+array=...? risposta : 2array
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Mi rincuora se non altro che non sono l'unico scemo che alle 3 e mezza della notte scrive cazzate.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
ho finalmente capito cosa intendevi
quindi ho scritto: Codice:
#include <stdio.h>
#include <stdlib.h>
int merge (int *a, int *b, int *c, int n, int t);
main ()
{
int *a, *b, *c, n, t, s, i, j, k;
printf ("Inserisci il numero di elementi contenuti nel primo array\n");
scanf ("%d", &n);
a=(int*)malloc(n*sizeof(int));
printf ("Inserisci il numero di elementi contenuti nel secondo array\n");
scanf ("%d", &t);
b=(int*)malloc(t*sizeof(int));
c=(int*)malloc((t+n)*sizeof(int));
for (i=0; i<n; i++) {
printf ("Inserisci l'elemento n.%d dell'array A\n", i+1);
scanf ("%d", &a[i]); }
for (j=0; j<t; j++) {
printf ("inserisci l'elemento n.%d dell'array B\n", j+1);
scanf ("%d", &b[j]); }
merge (a, b, c, n, t);
printf ("La fusione dei due array ha generato un terzo array contenente i seguenti elementi\n");
for (k=0; k<(n+t); k++) {
printf ("%d\n", c[k]); }
system ("pause");
free (a);
free (b);
}
int merge (int *a, int *b, int *c, int n, int t) {
int s= n+t;
int i, j;
int k=-1;
for (i=0; i<n; i++) {
for (j=0; j<t; j++) {
if (a[i]<b[j]) {
c[k++]=a[i]; }
else { c[k++]=b[j]; }
}
se inserisco ad esempio a= {1,2} e b= {3,4} nell'array risultante mi stampa valori come 1, 1, 2, 2, 2... e se provassi ad avanzare contemporaneamente nei due array con un unico indice incrementandolo ogni volta di uno? |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1661
|
vediamo se ho capito.
devi fondere due array ordinati in modo da avere un terzo array (sempre ordianto) che li contenga entrambi? esempio primo array: 1, 5, 6 secondo array: 2, 9, 10 (sto supponendo che per ordine intendi la grandezza del numero in ordine crescente) array dopo il merge: 1, 2, 5, 6, 9, 10 se cosi fosse, quali vincoli hai? ci sono parecchie strade da seguire, sembra che ti sei un po' complicato la vita ^^ |
|
|
|
|
|
#9 | |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
Quote:
ghghgh se ci sono tante strade da seguire secondo me allora mi sono completamente perso |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
Codice:
for (i=0; i<n; i++) {
for (j=0; j<t; j++) {
if (a[i]<b[j]) {
c[k++]=a[i]; }
else { c[k++]=b[j]; }
}
}
}
La soluzione che mi sembra migliore (che tra l'altro è il merge che si usa di solito in mergesort) è fare un unico ciclo che dura n+t e tenere due ulteriori indici, che indicano a che punto dei vettori a e b si è arrivati. |
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
nel frattempo ho avuto un'idea, non so se coincide con quello che hai scritto tu
pensavo di fare un unico ciclo for che scorre l'array C vuoto... e SE a[i]<b[j] allora c[k]=a[i] ed incremento l'indice i di 1. Altrimenti c[k]=b[j] ed incremento j di 1... ora provo a vi faccio sapere :P così: Codice:
int merge (int *a, int *b, int *c, int n, int t) {
int s= n+t;
int i=0;
int j=0;
int k;
for (k=0; k<s; k++) {
if (a[i]<b[j]) {
c[k]=a[i];
i++; }
else { c[k]=b[j];
j++;}
}
}
Ultima modifica di fabri_napoli : 14-12-2008 alle 17:07. |
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
ok, finalmente funziona
ringrazio tutti per il vostro prezioso aiuto! domani ho la prova......!!!!! mi manca solo un ultimo esercizio e poi posso riposarmi! grazie ancoraaaa!!! |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1661
|
buona fortuna allora
ps: se posso darti un consiglio, cerca di usare dei nomi per le variabili con un po più di significato, aiutano a non confondersi.
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2008
Messaggi: 530
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:48.





















