PDA

View Full Version : Ultimo favore


Vasec87
29-10-2006, 22:02
Non pensate che voglia approfittare della vostra gentilezza, ma mi servirebbe un ultimo piacerino. Sto cercando di recuperare a programmazione ma mi sono stati dati degli esercizi che devo consegnare tra 7 giorni che per il momento non penso di riuscire a fare. se potete darmi una mano mi fareste un grandissimo piacere.

eccoli:
ESERCIZIO 1:
Due array A e B di uguale lunghezza n sono identici se hanno gli stessi elementi nelle stesse posizioni. Quindi l'array {1, 1, 3} è identico all'array {1,1,3}, ma non all'array {1, 3, 1}.
Scrivere un programma che verifica se due array di interi sono identici.
INPUT: numero n degli elementi dei due array e successivamente i 2n interi elementi dei due array
OUTPUT:1 se due array sono identici, 0 altrimenti.


ESERCIZIO 2:Due array A e B di lunghezza rispettivamente n e m sono simili se contengono gli stessi elementi. Attenzione che l'array {1,1,3} è simile all'array {1,3,1} ma anche all'array{3,3,3,1}, ma non all'array{1,2,3}.
Scrivere un programma che verifica se due array di interi sono simili.
INPUR: numero n degli elementi del primo array, successivamente i suoi n, poi la lunghezza m del secondo array e successivamente i suoi m elementi.
OUTPUT: 1 se i due array sono simili, 0 altrimenti.


ESERCIZIO 3:Dati due array A e B di uguale lunghezza, A è permutazione di B, se contiene esattamente gli stessi elementi B, non necessariamente nelle stesse posizioni (eventuali elementi ripetuti devono avere lo stesso numero di occorrenze in entrambi gli array).
Attenzione quindi che l'array{1,1,3} è permutazione dell'array {1,3,1} ma non dell'array{3,3,1}.
Scrivere un programma che verifica se due array di interi sono tra loro permutazioni.
INPUT:numero n degli elementi dei due array e successivamente i 2n elementi gli elementi dei due array.
OUTPUT: 1 se i due array sono uno la permutazione dell'altro, 0 altrimenti.


ESERCIZIO 4:
(CRIVELLO DI ERATOSTENE) I numeri primi si definiscono in matematica come quei numeri naturali che sono divisibili solo per 1 e per se stessi.Esiste un antichissimo metodo (forse uno dei primi algoritmi di cui si abbia conoscenza) per generare tutti i numeri primi da 1 ad n, noto come crivello di eratostene, che risale al III secolo a.c: si scrivono tutti i numeri naturali da 1 a n. Si comincia da 2 e si cancellano tutti i suoi multipli(4,6,8,10...).Si prende il prossimo numero non cancellato, il 3 e si cancellano tutti i suoi multipli. A questo punto il primo numero non cancellato è il 5 e si cancellano i suoi multipli e cosi via. Alla fine seguendo questo procedimento, i numeri non cancellati sono tutti i numeri primi tra 1 e n(quando ci si puo fermare?)
Voi dovrete semplicemente scrivere un programma che legge un intero n e produce la tabella dei numeri primi da 1 a n.[SUGGERIMENTO usare un array(dimensione massima 1000), inizializzare tutti i suoi elementi a 1; poi applicare l'algoritmo di eratostene dove cancellare il numero i, significa porre a 0 l'i-esimo elemento dell'array-
Stampare l'indice degli elementi dell'array rimasti uguali a 1]


ESERCIZIO 5:
TRIANGOLO DI TARTAGLIA
Scrivete un programma che rivevuto in input un numero naturale n, stampa in output l'n-esima riga del triangolo di tartaglia. Considerare la riga che contiene solo 1 come la 0-esima, quella con 11 la prima e cosi via.



GRAZIE
GRAZIE
GRAZIE :help:

leox@mitoalfaromeo
29-10-2006, 22:37
sono programmini molto semplici... credo che non dovresti avere grossi problemi a farli...

più che altro, e questo mi fa pensare male, non hai specificato in che linguaggio devi farli:D

Andrea16v
29-10-2006, 23:24
Suppongo in Java, giusto?
Sono esercizi molto semplici, basta che ti studi una guida che abbia come oggetto gli array e la loro gestione. Devi anche scrivere delle classi test che mettano alla prova i metodi che andrai a creare?

Vasec87
30-10-2006, 08:34
in C devo farli.

io ci proverò. però se potreste darmi una mano....

Vasec87
30-10-2006, 10:57
dai, per favore, per voi possono essere una stronzata ma per me sono molto difficili, ho cominciato oggi a studiare i vettori e non penso di fare in tempo a farli per lunedi. ci proverò ma mi garantite che nel caso non ci riuscissi mi aiuterete?

grazie

Vasec87
30-10-2006, 18:59
ho provato a fare il primo esercizio ma funziona a metà, potete darci un'occhiata?

#include <stdio.h>

int main()
{


int a[1000];
int b[1000];
int i=0;
int j=0;
int k=0;


scanf("%d", &j);

for(i=0;i<j;i++){
scanf("%d", &a[i]);
scanf("%d", &b[i]);
}
for(i=0;i<j;i++){
if(a[i]!=b[i]){
k++;
}}
if(k>0){
printf("\n0\n");
}
else
{
printf("\n1\n");
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}




FUNZIONA SOLO SE TUTTI GLI ELEMENTI DI UN VETTORE SONO UGUALI, MA SE PER ESEMPIO METTO 2 VETTORI DI ELEMENTI 1,2,3,4,5 NON FUNZIONA

AIUTATEMI VI PREGOOOO :help: :help:

mamo139
30-10-2006, 20:45
ESERCIZIO 4:
(CRIVELLO DI ERATOSTENE) I numeri primi si definiscono in matematica come quei numeri naturali che sono divisibili solo per 1 e per se stessi.Esiste un antichissimo metodo (forse uno dei primi algoritmi di cui si abbia conoscenza) per generare tutti i numeri primi da 1 ad n, noto come crivello di eratostene, che risale al III secolo a.c: si scrivono tutti i numeri naturali da 1 a n. Si comincia da 2 e si cancellano tutti i suoi multipli(4,6,8,10...).Si prende il prossimo numero non cancellato, il 3 e si cancellano tutti i suoi multipli. A questo punto il primo numero non cancellato è il 5 e si cancellano i suoi multipli e cosi via. Alla fine seguendo questo procedimento, i numeri non cancellati sono tutti i numeri primi tra 1 e n(quando ci si puo fermare?)
Voi dovrete semplicemente scrivere un programma che legge un intero n e produce la tabella dei numeri primi da 1 a n.[SUGGERIMENTO usare un array(dimensione massima 1000), inizializzare tutti i suoi elementi a 1; poi applicare l'algoritmo di eratostene dove cancellare il numero i, significa porre a 0 l'i-esimo elemento dell'array-
Stampare l'indice degli elementi dell'array rimasti uguali a 1]


int numeriprimi[dimensione_massima];
for (int x = 1; x < dimensione_massima;x++){
numeriprimi[x] = 1;
}

for (int y = 2; y <dimensione_massima;y++){
if (numeriprimi[y]==1){
int z = y;
while (z < dimensione_massima){
z = z * y;
numeriprimi[z]=0;
}
}
}




ps: vergogna... ti fai pure aiutare da un dilettante :D :D
pps: ho fatto solo questo xche mi sta simpatico il CRIVELLO DI ERATOSTENE

Vasec87
30-10-2006, 20:49
ti ringrazio, lo provo subito

TuLKaS85
30-10-2006, 20:49
prova ad usare un while tipo questo, senza contatori e cose varie....

uguali=1;i=0;

while(uguali==1 && i<j)
{
if(a[i]!=b[i])
uguali=0;
i++;
}
poi restituisci oppure stampi la variabile uguali e sei a posto :)

Vasec87
30-10-2006, 20:55
tulka a che esercizio ti riferisci?

potresti inserire il pezzo che hai postato nel posto giusto del mio esercizio, sennò non mi ci raccapezzo piu


per mamo139: . potresi indicarmi anche le scanf e le printf per il risultato finale, cioè dove e come andrebbero inserite, vi ringrazio.

TuLKaS85
30-10-2006, 21:00
tulka a che esercizio ti riferisci?

potresti inserire il pezzo che hai postato nel posto giusto del mio esercizio, sennò non mi ci raccapezzo piu


per mamo139: . potresi indicarmi anche le scanf e le printf per il risultato finale, cioè dove e come andrebbero inserite, vi ringrazio.

beh...se prescindiamo dal fatto che le tue tracce parlano di input e outpu e sarebbe + adeguato implementare delle function...
cmq ti ho corretto il primo esercizio , del tuo codice và bene l'inizializzazione degli array, ricorda di dichiarare la variabile uguali dopodicè ci metti il while ed infine fai una semplice printf("%d",uguali);

Vasec87
30-10-2006, 21:08
ok, grazie

domani li rivedo tutti bene e li riscrivo

TuLKaS85
30-10-2006, 21:57
ESERCIZIO 3ati due array A e B di uguale lunghezza, A è permutazione di B, se contiene esattamente gli stessi elementi B, non necessariamente nelle stesse posizioni (eventuali elementi ripetuti devono avere lo stesso numero di occorrenze in entrambi gli array).
Attenzione quindi che l'array{1,1,3} è permutazione dell'array {1,3,1} ma non dell'array{3,3,1}.
Scrivere un programma che verifica se due array di interi sono tra loro permutazioni.
INPUT:numero n degli elementi dei due array e successivamente i 2n elementi gli elementi dei due array.
OUTPUT: 1 se i due array sono uno la permutazione dell'altro, 0 altrimenti.



ho pensato a questo.... è da ottimizzare pareccchio ma come idea base può andare.

output,cont=0;
uguali=1;
if(n<m) //con n size di a e m size di b
{
for(j=0;j<m;j++)
{
i=0;
while(i<n&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=m)
output=1;

}
else
{
for(j=0;j<n;j++)
{
i=0;
while(i<m&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=n)
output=1;
}

Vasec87
31-10-2006, 09:36
secondo me è sbagliato.

il testo dice due vettori di uguale lunghezza, e perchè tu hai inserito if(n<m)??

Vasec87
31-10-2006, 10:02
PER QUANTO RIGUARDA IL PRIMO ESERCIZIO

tulka ho fatto come mi hai detto ma ho sempre lo stesso problema.

se per esempio inserisco due vettori, uno di elementi 1,2,3 e l'altro di elementi 1,2,3 mi dice che sono diversi. per farmi dire che sono uguali devo solo inserire vettori tipo 1,1,1, e 1,1,1,

come mai?

Vasec87
31-10-2006, 10:04
so proprio un coglion, ero io che sbagliavo a inserire gli elementi

funziona funziona


puoi aiutarmi a modificare quell'altro programmone che hai fatto? quello che si deve ottimizzare

grazie

Vasec87
31-10-2006, 10:08
PER MAMO139

nell'esercizio del crivello di eratostene che mi hai fatto puoi dirmi cosa devo inserire, cioè cosa devo stampare, ecc..

Vasec87
31-10-2006, 12:27
vi prego aiutatemiii

il primo esercizio è fatto

mi mancano gli altri 4, 2 li avete anche abbozzati ma non ci riesco a mettere le mani lo stesso, non so cosa farci, se potete dirmi voi...

mamo139
31-10-2006, 14:56
PER MAMO139

nell'esercizio del crivello di eratostene che mi hai fatto puoi dirmi cosa devo inserire, cioè cosa devo stampare, ecc..
devi stampare il numero di posizione degli array che valgono 1
for (int x = 0; x< dimensione_massima;x++){
if (numeriprimi[x]==1) printf("%d",x);
}

ps:

TuLKaS85
31-10-2006, 14:59
secondo me è sbagliato.

il testo dice due vettori di uguale lunghezza, e perchè tu hai inserito if(n<m)??

ho sbagliato io a dirti la traccia...è il secondo esercizio quello...

per il crivello di erastotene o come si dice...

fai un for che va da 0 a 1000 con un if dentro del tipo
for(i=0;i<SIZE;i++) //SIZE nel tuo caso è 1000
if(numeriprimi[i]==1)
printf("%d ",i);

questo lo metti in coda al programma...

un consiglio, a meno che questa non sia una cosa occasionale, mettiti a studiare un pochino, l'approccio al programma ci può stare che uno trova difficoltà, ma mettere le stampe è molto banale. Se poi dopo questi programmi hai chiuso con il C allora te ne potresti anche sbattere :D :D

Vasec87
31-10-2006, 15:04
ehehehe non ho chiuso, devo fare l'esame

per quanto riguarda la stampa volevo avere la certezza, visto che questi esercizi sono molto importanti e vi ringrazio per il vostro aiuto

Vasec87
31-10-2006, 15:10
mamo139 mi devi scusare, ma non riesco proprio a metterlo insieme il programma che hai fatto, mi da qualche errore. forse sbaglio a inizializzare le variabili, bo

Vasec87
31-10-2006, 15:16
non ci riesco proprio ad aggiustare questi due programmi che mi avete fatto

non è che quando avete 2 minuti liberi potreste scrivermeli completi. :help: :help: :help:
sennò non fa niente, grazie lo stesso

Vasec87
31-10-2006, 17:20
ho provato a correggere il secondo esercizio ma non va, sembra che si compila ma poi quando si apre la schermata nera mi esce l'errore "non inviare"ecc..
cosa c'è di sbagliato nell'esercizio?



#include <stdio.h>
#define dimensione_massima 10000
int main()
{

int x=1;
int y=2;
int z;
int numeriprimi[dimensione_massima];

for (x = 1; x < dimensione_massima;x++){
numeriprimi[x] = 1;
}

for (y = 2; y <dimensione_massima;y++){
if (numeriprimi[y]==1){
z = y;
while (z < dimensione_massima){
z = z * y;
numeriprimi[z]=0;
}
}
}
for (int x = 0; x< dimensione_massima;x++){
if (numeriprimi[x]==1) printf("%d",x);
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

}

TuLKaS85
31-10-2006, 17:42
ho provato a correggere il secondo esercizio ma non va, sembra che si compila ma poi quando si apre la schermata nera mi esce l'errore "non inviare"ecc..
cosa c'è di sbagliato nell'esercizio?



#include <stdio.h>
#define dimensione_massima 10000
int main()
{

int x=1;
int y=2;
int z;
int numeriprimi[dimensione_massima];

for (x = 1; x < dimensione_massima;x++){
numeriprimi[x] = 1;
}

for (y = 2; y <dimensione_massima;y++){
if (numeriprimi[y]==1){
z = y;
while (z < dimensione_massima){
z = z * y;
numeriprimi[z]=0;
}
}
}
for (int x = 0; x< dimensione_massima;x++){
if (numeriprimi[x]==1) printf("%d",x);
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

}

10000 è un pò troppo metti 1000 come max...
l'errore è che hai inizializzato x a 1 e y a 2 e poi nel ciclo di stampa fai partire x da 0 ...
quindi o correggi i cicli di x e y facendoli partire rispettivamente da 0 e 1 oppure modifichi la stampa finale facendo partire x da 1

TuLKaS85
31-10-2006, 17:55
un suggerimento per il 3° ....

prova ad ordinare i due array...
in questo modo se sono permutazioni una volta ordinati in modo crescente, basta fare un confronto tra i vari elementi come nel 1° esercizio...
se si verifica l'uguaglianza in tutti gli elementi allora sei a posto altrimenti non sono pemutazioni
es.

A(5,6,1,2,1) B(1,5,6,1,2)
dopo l'ordinamento
A(1,1,2,5,6) B(1,1,2,5,6)
poi confronti il 1° di A col 1° di B il 2° col 2° e così via...
appena ne trova uno diverso esci.

good work :)

Vasec87
31-10-2006, 17:57
ho corretto, però non esce niente, cioè si apre la finestra e c'è il cursore che lampeggia e basta. non è che puoi modificarlmelo tu? gentilissimamente :)

Vasec87
31-10-2006, 17:59
l'ultimo mio messaggio si riferiva al penultimo messaggio tuo

TuLKaS85
31-10-2006, 18:26
allora era sbagliato l'algoritmo di partenza(vedi commenti nel codice), poi è meglio usare un size massimo per l'array, ed usarne solo una sottoparte, in modo da non fare overflow nel programma...


#include <stdio.h>
#define dimensione_massima 1200
void main()
{


int x,y,z;
int numeriprimi[dimensione_massima];
int n:
printf("inserire quanti numeri trovare");
scanf("%d",&n);

for (x = 1; x < n;x++){
numeriprimi[x] = 1;
}

for (y = 2; y <n;y++){
if (numeriprimi[y]==1){
z = y;
while (z < n){
z = z + y; //qui vanno addizionati
numeriprimi[z]=0;
}
}
}
//numeriprimi[0] non è mai stato inizializzato quindi meglio saltarlo
for (x = 1; x< n;x++){
if (numeriprimi[x]==1)
printf("%d ",x);
}



}

Vasec87
31-10-2006, 18:30
:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

ho fatto copia e incolla ma non funziona, ma com'è possibile

alla fine ci ho aggiunto solo

while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

per vedere il risultato.

TuLKaS85
31-10-2006, 18:33
:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

ho fatto copia e incolla ma non funziona, ma com'è possibile

alla fine ci ho aggiunto solo

while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

per vedere il risultato.


scusa ho sbagliato a scrivere correggi la dichiarazione di int n al posto dei : metti ovviamente ; :D :D

e cmq anche senza quel ciclo che aggiungi tu dovresti vederlo il risultato....

Vasec87
31-10-2006, 18:35
non funziona lo stesso

mi da l'errore "main" must return int

TuLKaS85
31-10-2006, 18:36
non funziona lo stesso

mi da l'errore "main" must return int

e mettici int main() e fai return 0 alla fine :mc:

Vasec87
31-10-2006, 18:38
funziona, sei un grande.

ma che esercizio era questo?? :D :D

quello del crivello di eratostene?


ti ringrazio infinitamente, ora di fare gli altri non mi va, spero mi darai qualche altro aiutino piu in la, visto che il piu è fatto

ciaoo

Vasec87
01-11-2006, 11:22
mi mancano solo questi due, mi dato una mano?

qualcuno li ha gia postati ma non so come aggiustarli, si dovrebbero ottimizzare

ESERCIZIO 2ue array A e B di lunghezza rispettivamente n e m sono simili se contengono gli stessi elementi. Attenzione che l'array {1,1,3} è simile all'array {1,3,1} ma anche all'array{3,3,3,1}, ma non all'array{1,2,3}.
Scrivere un programma che verifica se due array di interi sono simili.
INPUR: numero n degli elementi del primo array, successivamente i suoi n, poi la lunghezza m del secondo array e successivamente i suoi m elementi.
OUTPUT: 1 se i due array sono simili, 0 altrimenti.


ESERCIZIO 3ati due array A e B di uguale lunghezza, A è permutazione di B, se contiene esattamente gli stessi elementi B, non necessariamente nelle stesse posizioni (eventuali elementi ripetuti devono avere lo stesso numero di occorrenze in entrambi gli array).
Attenzione quindi che l'array{1,1,3} è permutazione dell'array {1,3,1} ma non dell'array{3,3,1}.
Scrivere un programma che verifica se due array di interi sono tra loro permutazioni.
INPUT:numero n degli elementi dei due array e successivamente i 2n elementi gli elementi dei due array.
OUTPUT: 1 se i due array sono uno la permutazione dell'altro, 0 altrimenti.

TuLKaS85
01-11-2006, 18:45
l'esercizio 2 te l'ho fatto devi solo metterci una stampa del risultato alla fine...

il 3° non è altro che il 1° solo che devi prima ordinare i due array

ecco un esempio semplice semplice di ordinamento (selezione di minimo)
lo devi solo applicare ai tuoi 2 array dopodichè procedi come nel primo...
pensi di superarlo l'esame consegnando questi esercizi ??
penso che dovresti impegnarti un pò di + :)


for(j=0:j<n-1;j++)
{
i_min=0;
for(i=j+1;i<n;i++)
if(a[i_min]>a[i])
i_min=i;
//scambio
temp=a[i];
a[i]=a[i_min];
a[i_min]=temp;
}

Vasec87
01-11-2006, 19:17
ti ringrazio domani ci provo


ci infatti devo impegnarmi molto di piu, mi metterò sotto

grazie ancora

Vasec87
01-11-2006, 20:57
sono a buon punto con il secondo e terzo esercizio. non è che puoi farmi quello del triangolo di tartaglia?

li non so proprio dove mettere mani, stavo vedendo su google ce ne sono molti simili, ma non so aggiustarli per il mio caso

TuLKaS85
01-11-2006, 22:16
TARTAGLIA

questo risponde alla traccia, non devi fare altro che copia e incolla...
senza falsa modestia mi sono limitato ad adattartelo, in rete ho visto l'algoritmo :p :p

cmq è semplice tartaglia segue una regola matematica:
identificato un numero del triangolo da riga e posizione k nella riga (da 0 a n)
indichiamo n la riga e k la posizione in essa
n!/(n-k)!*(k)!
ci identifica il nostro numero
prova con la 3° riga e posizione 1
1
1 1
1 2 1

2!/(2-1)!*1!
2*1/1*1
2/1= 2

ciao :)

#include <stdio.h>

long int Fattoriale(int val)
{
int i;
long int fatt = 1;
for (i = 1; i <= val; i++)
fatt = fatt * i;
return fatt;
}

int Binomiale(int n, int k)
{
return Fattoriale(n)/(Fattoriale(n-k) * Fattoriale(k));
}

int main()
{
int n, i, j;

printf("Stampa riga del triangolo di Tartaglia\n");
printf("Inserire la riga : ");
scanf("%d",&n);

for (j = 0; j < n; j++)
printf("%d ", Binomiale(n-1,j));

return 0;
}

Vasec87
02-11-2006, 07:58
ti ringrazio tantissimo

non ci sarei mai riuscito a farlo

Vasec87
02-11-2006, 08:02
funziona, però perchè se inserisco una riga alta, tipo la 20esima mi escono numeri come -1, -3 oppure se metto la 60esima riga mi da errore?

Vasec87
02-11-2006, 08:39
IL SECONDO ESERCIZIO PENSO DI AVERLO FATTO, MA NON SO COSA STAMPARE ORA, PUOI DARCI UN'OCCHIATA

#include <stdio.h>

int main()
{

int a[1000];
int b[1000];
int f=0;
int g=0;
int h=0;
int z=0;
int output=0;
int cont=0;
int uguali=1;
int j=0;
int i=0;

scanf("%d", &f);

for(g=0;g<f;g++){
scanf("%d", &a[g]);
}
scanf("%d", &h);

for(z=0;z<h;z++){
scanf("%d", &b[z]);
}

if(f<h) //con n size di a e m size di b
{
for(j=0;j<h;j++)
{
i=0;
while(i<f&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=h)
output=1;

}
else
{
for(j=0;j<f;j++)
{
i=0;
while(i<h&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=f)
output=1;
}
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();

}

TuLKaS85
02-11-2006, 22:05
funziona, però perchè se inserisco una riga alta, tipo la 20esima mi escono numeri come -1, -3 oppure se metto la 60esima riga mi da errore?


prova ad usare long long int nella dichiarazione di fatt e della function fattoriale....

long long int Fattoriale(int val)

...

long long int fatt;

nel secondo esercizio devi stampare output.... e stai attento che nei confronti (gli if) ci vuole == non = .
E usa meno variabili !!

Vasec87
03-11-2006, 09:21
tulkaS85 posso chiederti un favore. non vorrei approfittare della tua gentilezza ma sono nei guai. entro stasera devo consegnare i 5 esercizi, mi manca il terzo e dovrei aggiustare il secondo. Potresti scrivermi il terzo, mi sembra che gia l'hai fatto, ma non riesco proprio ad aggiustarlo. non so come fare. anche sull'altro mio trhead andbin mi ha aiutato parecchio, in pratica mi manca soltanto 1-2 righe e ho finito il secondo esercizio, ma non riesco proprio a scriverle queste 2 righe nonostante siano cazzate. per questa volta potete aiutarmi voi a scriverli e dalla prossima non chiederò piu il vostro aiuto?
non pensate che scrivendomi questi 2 esercizietti io non imparerò niente, perchè ora sto cominciando dalle prime cose e sto studiando come si deve, ma entro stasera non riuscirò ad imparare quello che mi serve per finire gli esercizi.

grazie infinite

TuLKaS85
03-11-2006, 22:01
//inizializzazione delle variabili - non mettere cose inutili servono solo quelle indicate nel programma nemmeno una in +

//cicli di inserimento negli array


output,cont=0;
uguali=1;
if(n<m) //con n size di a e m size di b
{
for(j=0;j<m;j++)
{
i=0;
while(i<n&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=m)
output=1;

}
else
{
for(j=0;j<n;j++)
{
i=0;
while(i<m&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont==n)
output=1;
}
printf("%d",output); //ecco cosa devi stampare

Vasec87
04-11-2006, 15:41
ti amo. :D

grazie, grazie, grazie

il terzo sono riuscito a farlo da solo

Vasec87
04-11-2006, 15:51
c'ho provato

puoi dirmi in cosa sbaglio?


#include <stdio.h>

int main()
{
int a[1000];
int b[1000];
int i=0;
int j=0;
int n=0;
int m=0;
int cont=0;
int output=0;
int uguali=0;



scanf("%d", &n);

for(i=0;i<n;i++);{
scanf("%d", &a[i]);}

scanf("%d", &m);

for(j=0;j<m;j++){
scanf("%d", &b[i]);}
output,cont=0;
uguali=1;
if(n<m) //con n size di a e m size di b
{
for(j=0;j<m;j++)
{
i=0;
while(i<n&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=m)
output=1;

}
else
{
for(j=0;j<n;j++)
{
i=0;
while(i<m&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont==n)
output=1;
}
printf("%d",output);
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}

alexsimone
04-11-2006, 16:34
VASEC CONTROLLA TRAI MESSAGGI PERSONALI PLEASE :cry: :cry: :cry:

TuLKaS85
04-11-2006, 16:34
scusami mi sn accorto che avevo commesso anche io un errore....

uguali va inizializzato a 0 non a 1 altrimenti non entra mai nel while....

poi tu hai sbagliato nei cicli for degli array :

for(i=0;i<n;i++) // qui avevi messo un bel ; che ti saltava la scanf ....
scanf("%d", &a[i]);

scanf("%d", &m);

for(j=0;j<m;j++)
scanf("%d", &b[j]); //qui sei nel ciclo di j devi mettere b[j]


ricorda che se all'interno di un costrutto c'è una sola istruzione non hai bisogno delle parentesi {...}
quindi se sotto al for(...) hai una sola istruzione puoi benissimo togliere quelle graffe, per il resto sei ok, basta che inizializzi uguali a 0 :)


p.s. l'ultimo esercizio hai risolto con long long int ?

Vasec87
04-11-2006, 16:39
no, se mettevo long long mi dava errore

l'ho lasciato cosi
andrà bene lo stesso

Vasec87
04-11-2006, 16:42
l'esercizio 2 l'ho fatto, ma ho provato a testarlo e pare che non va o forse non ho capito io come funziona. puoi provarlo tu e dirmi se funziona?


#include <stdio.h>

int main()
{
int a[1000];
int b[1000];
int i=0;
int j=0;
int n=0;
int m=0;
int cont=0;
int output=0;
int uguali=0;



scanf("%d", &n);

for(i=0;i<n;i++){
scanf("%d", &a[i]);}

scanf("%d", &m);

for(j=0;j<m;j++){
scanf("%d", &b[j]);}
output,cont=0;
uguali=0;
if(n<m) //con n size di a e m size di b
{
for(j=0;j<m;j++)
{
i=0;
while(i<n&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont=m)
output=1;

}
else
{
for(j=0;j<n;j++)
{
i=0;
while(i<m&&uguali==0)
{
if(a[i]==b[j])
{
uguali=1;
cont++;
}
i++;
}
}
if(cont==n)
output=1;
}
printf("\n");
printf("%d",output);
while(getchar() != '\n');
printf("Premere INVIO per continuare...");
getchar();
}

Vasec87
04-11-2006, 16:44
si adesso sembra che funziona

puoi darmi la conferma?

grazie di tutto

TuLKaS85
04-11-2006, 17:05
si adesso sembra che funziona

puoi darmi la conferma?

grazie di tutto
si l'ho provato prima ed era ok...

ti allego il triangolo di tartaglia modificato...
così puoi avere un range di numeri maggiori, praticamente nelle function al posto di lavorare sugli interi, lavori sui double che hanno un range maggiore
dopodichè c'è un cast che fa ritornare il tutto long int in modo da non farti stampare i numeri decimali....


#include <stdio.h>

double Fattoriale(int val)
{
int i;
double fatt = 1;
for (i = 1; i <= val; i++)
fatt = fatt * i;
return fatt;
}

//cast sul return della funzione
//conversione da double a long int
//permette di fare i calcoli in double avendo un range + elevato

long int Binomiale(int n, int k)
{
return Fattoriale(n)/(Fattoriale(n-k) * Fattoriale(k));
}

int main()
{
int n, i, j;

printf("Stampa del triangolo di Tartaglia\n");
printf("Dimensione del triangolo : ");
scanf("%d",&n);

for (i = 1; i <= n; i++)
{
for (j = 0; j <= i; j++)
printf("%d ", Binomiale(i,j));
printf("\n");
}
}

Vasec87
04-11-2006, 17:06
ti ringrazio infinitamente

Vasec87
04-11-2006, 17:08
comq l'esercizio su tartaglia che hai rifatto non è corretto, perchè se inserisci l'n-esima riga ti da in output le righe dalla prima alla n-esima. invece dovrebbe visualizzare solo l'n-esima.

TuLKaS85
04-11-2006, 19:07
comq l'esercizio su tartaglia che hai rifatto non è corretto, perchè se inserisci l'n-esima riga ti da in output le righe dalla prima alla n-esima. invece dovrebbe visualizzare solo l'n-esima.

basta fare delle piccole modifiche.....
prendi la versione che ho già postato in precedenza come esempio, o meglio a quella già postata cambia le variabili dove qui sono dichiarate double...

Vasec87
04-11-2006, 19:14
sarebbe questo, ma cosa devo cambiare e con cosa

#include <stdio.h>

long int Fattoriale(int val)
{
int i;
long int fatt = 1;
for (i = 1; i <= val; i++)
fatt = fatt * i;
return fatt;
}

int Binomiale(int n, int k)
{
return Fattoriale(n)/(Fattoriale(n-k) * Fattoriale(k));
}

int main()
{
int n, i, j;

scanf("%d",&n);

for (j = 0; j < n; j++)
printf("%d ", Binomiale(n-1,j));

}

TuLKaS85
04-11-2006, 23:13
nella fnction fattoriale al posto di long int fattoriale(....) metti double fattoriale (....)

e poi la variabile long int fatt diventa double fatt

il resto uguale