|
|
|
|
Strumenti |
20-07-2014, 19:49 | #1 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
aiuto array
salve a tutti, mi servirebbe un piccolo aiuto con relativa spiegazione, se è possibile, su questo programma.
Dunque devo fare un programma che inserita una successione di numeri indefiniti la ordini in output in una maniera particolare, faccio un esempio: inserendo i numeri 4 12 54 23 9 44 100, e digitando 0 l'output dovrà essere: 23 12 44 9 54 4 100 vale a dire: il numero mediano(ovvero il 23 nell'esempio), poi il precedente numero minore(ovvero 12che è <23), poi il seguente numero maggiore(ovvero 44 che è >23), poi 9(<12), poi 54(>44), poi 4(<9), e infine 100(>54) questa è la base che ho fatto dove faccio inserire i numeri, faccio chiudere il blocco digitando 0 e infine faccio in modo che se la serie ha un numero pari di elementi il programma riparta dall'inizio #include <stdio.h> #include <stdlib.h> int main (void) { int numero, conta, rest; rest=0; conta=0; do{ printf("Inserire una serie di numeri, digitare 0 per terminare\n"); printf("Inserisci un numero: "); scanf("%d", &numero); while(numero!=0) { conta=conta+1; printf("Inserisci un numero: "); scanf("%d", &numero); } rest=conta % 2; if(rest<=0) { system("CLS"); printf("Errore la successione inserita e' pari!\n "); } } while(rest<=0); } a questo punto, m aiutate a capire come trovare il mediano dell'array di elementi indefiniti e le successive operazioni per arrivare all'output scritto in precedenza? grazie in anticipo a chi mi aiuterà |
20-07-2014, 20:15 | #2 |
Senior Member
Iscritto dal: Oct 2010
Messaggi: 1609
|
Non so gli altri, ma io non capisco cosa intendi con "12 che è 23". Dopo aver scelto il mediano, il numero minore va cercato solo in una delle due parti del vettore? Prova a spiegare un po' meglio quello che ti viene chiesto
__________________
Trattative nel mercatino: IronHead - fybpeppe - xcavax Utenti assolutamente DA EVITARE: devilred "Chi c**a sott' 'a neve, pure si ffa 'a bbuca e poi 'a copre, quanno 'a neve se scioje, 'a mm***a vie' sempre fori" T. Milian |
20-07-2014, 20:59 | #3 | |
Member
Iscritto dal: Jan 2008
Messaggi: 103
|
Quote:
4 < 9 < 12 < 23 > 44 > 54 > 100 23 12 44 9 54 4 100 12 < 23 44 > 23 9 < 12 54 > 44 4 < 9 100 > 54 Basta metterli in ordine dal più piccolo al più grande o viceversa poi hanno posizioni definite basta che come primo prendi quello in mezzo 4 < 9 < 12 < 23 > 44 > 54 > 100 x-3 x-2 x-1 x x+1 x+2 x+3 -> 23 12 44 9 54 4 100 x x-1 x+1 x-2 x+2 x-3 x +3 Ultima modifica di Q_Q : 20-07-2014 alle 21:03. |
|
20-07-2014, 22:22 | #4 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
era "12 che è minore di 23" lo so che è contorto da capire Q_Q ha capito perfettamente il concetto, l'idea di ordinarli e poi indicare il numero in mezzo potrebbe funzionare ma in linguaggio c++ come lo scrivo? poichè i numeri dell'array in questione non vanno definiti, non so come fare a trovare il mediano, help me
|
21-07-2014, 07:52 | #5 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Devi scrivere un algoritmo di ordinamento, se cerchi in rete ne trovi tanti, poi prendi quello centrale (se sono dispari), o i due centrali e ne fai la media (se sono pari).
|
21-07-2014, 10:47 | #6 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
ho cercato ma non ho trovato l'algoritmo per numeri indefiniti e che trovi il mediano, se faccio la media mi divide i numeri x due mica mi trova il numero di mezzo
|
21-07-2014, 12:00 | #7 |
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
Dati n numeri ordinati con n dispari allora l'indice del mediano è m=(n+1)/2. Nel caso in cui n sia pari per calcolare il mediano fai la media dei due numeri in posizione m1 = n/2 e m2 = n/2 + 1
Ti suggerisco di fare attenzione al fatto che gli indici di un array partono da 0, e di considerare eventualmente la possibilità di utilizzare la divisione fra interi. Ultima modifica di oNaSsIs : 21-07-2014 alle 12:10. |
21-07-2014, 12:13 | #8 | |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
E se i numeri sono 4 quale scegli come numero di mezzo? Non l'ho mica scritta io la definizione di mediana... |
|
21-07-2014, 12:16 | #9 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Certo se cerchi l'algoritmo per fare "tutto" non lo troverai mai, devi essere tu a capire come semplificare un problema in modo da poterlo risolvere mediante n algoritmi semplici.
|
21-07-2014, 18:29 | #10 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
allora seguendo i vostri consigli ho impostato la fine del ciclo digitando 0 in modo più proficuo e meno invasivo, e poi ho sistemato la successione in modo tale che sia stampata in ordine crescente, e ora? come faccio a spiegare al compilatore la formula scritta da Q_Q?
#include <stdio.h> #include <stdlib.h> int main(void) { int i=0; int vett[1000]; int n_elementi; int count=0; printf("Inserire numeri(0 per terminare):\n "); do { printf("\nNumero: "); scanf("%d",&vett[i]); i++; } while(vett[i-1]!=0); n_elementi=i-1; int j=0, temp=0; for(i=0;i<n_elementi;i++) { for (j=0;j<n_elementi-1;j++) { if (vett[j]>vett[j+1]) { temp= vett[j]; vett[j]= vett[j+1]; vett[j+1]= temp; } } } for (i=0;i<n_elementi;i++) { printf("\n%d\n",vett[i]); } } |
21-07-2014, 21:22 | #11 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
pleeeeease help me, non riesco a venirne a capo, credo di esserci molto vicino ma nn trovo la soluzione
|
22-07-2014, 08:54 | #12 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Cioè vorresti che noi ti dicessimo come si scrive in linguaggio c una semplice sequenza di istruzioni? Credimi, non è per cattiveria, perdo più tempo a scriverti questo discorso che a fornirti la soluzione, ma dovresti cercare di impegnarti un po' altrimenti non imparerai nulla.
|
22-07-2014, 16:24 | #13 | |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
Quote:
Ultima modifica di slevinse7en : 22-07-2014 alle 18:18. |
|
23-07-2014, 08:38 | #14 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Bene, mi fa piacere
|
23-07-2014, 12:36 | #15 |
Junior Member
Iscritto dal: Jul 2014
Messaggi: 7
|
ho lavorato ancora sul programma, questa volta utilizzando le liste e non gli array, in questo modo inserisco i numeri, termino con 0 e li ordino dal più piccolo al più grande:
#include <stdlib.h> #include <stdio.h> struct nodo { int info; struct nodo *next; }; /* leggi_lista */ struct nodo *leggi_lista(void) { int a; struct nodo *p, *primo; primo = NULL; printf("\nNumero: "); scanf("%d", &a); do { p = (struct nodo*)malloc(sizeof(struct nodo)); p->info = a; p->next = primo; primo = p; printf("\nNumero: "); scanf("%d", &a); }while (a != 0); return(primo); } /* stampa_lista */ void stampa_lista(struct nodo *primo) { while (primo != NULL) { printf("\n\n%d", primo->info); primo = primo->next; } return; } /* bubble_sort */ struct nodo *bubble_sort(struct nodo *primo) { struct nodo *p, *ultimo; int flag, appo; ultimo = NULL; flag = 1; while (flag == 1) { p = primo; flag = 0; while (p->next != ultimo) { if (p->info > (p->next)->info) { appo = p->info; p->info = (p->next)->info; (p->next)->info = appo; flag = 1; } p = p->next; } ultimo = p; } return(primo); } /* ** main */ int main(void) { struct nodo *primo; printf("Inserisci gli elementi (0 per terminare):\n "); primo = leggi_lista(); primo = bubble_sort(primo); stampa_lista(primo); return(1); } a questo punto mi domandavo: per porre il mediano come primo numero e successivamente i numeri che lo precedono e lo seguono a due a due, conviene modificare il bubble sort oppure inserire un ciclo for e assegnare i numeri ottenuti ad un array? |
23-07-2014, 13:29 | #16 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
L'ordinamento non va modificato per assolvere ad altri compiti, scrivi una funzione ad hoc per fare quello che ti serve.
Un consiglio: prendendo come riferimento la funzione stampa_lista, realizza una funzione che restituisce il numero di elementi nella lista, ti sarà utile per calcolare l'indice dell'elemento centrale. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:02.