Newsgroup: it.comp.lang.c
Titolo: ultimo aiuto prima dell'esame.grazie

vi presento un esercizio (per voi sicuramente facilissimo):
Scrivere il programma costituito dal main e da una procedura (a proposito
c'č differenza tra procedura e funzione?) che, senza l'uso di variabili
globali, riceve dal main 3 puntatori ad interi (P1,P2,P3) e modifica i 3
puntatori nel modo seguente: P1 prende il valore di P2, P2 prende il valore
di P3, P3 prende il valore di P1. Si scriva il programma in modo che la
modifica sia effettiva anche nel main come mostrato nell'esempio seguente:
memoria Heap:              ind1            ind2             ind3
main prima della proc:   P1(ind1)   P2(ind2)   P3(ind3)
main dopo proc:           P1(ind2)   P2(ind3)    P3(ind1)
io l'ho fatto cosě:
void proc(int **, int **, int **);
main(){
int *p1,*p2,*p3;
p1=(int *) malloc(sizeof(int));
p2=(int *) malloc(sizeof(int));
p3=(int *) malloc(sizeof(int));
scanf("%d%d%d",*p1,*p2,*p3); /* (questo forse č sbagliato)*/
proc(&p1,&p2,&p3);
}
void proc(int **pp1,int **pp2, int **pp3)
{ int temp;
*pp1= temp;
*pp1=*pp2;
*pp2=*pp3;
*pp3=temp;
}
E' corretto? Inoltre č obbligatorio utilizzare queste variabili dinamiche?
Poi perchč nell'esercizio dice di non utiizzare variabili globali se tanto
non mi servono?
Grazie mille.

Io l'avrei fatto cosi', senza l'uso della malloc,
#include <malloc.h>
#include <stdio.h>
#include <conio.h>
void proc(int *, int *, int *);
void main(void)
{
int p1,p2,p3;
scanf("%d%d%d",&p1,&p2,&p3);
proc(&p1,&p2,&p3);
printf("%d%d%d",p1,p2,p3);
getch();
}
void proc(int *pp1,int *pp2, int *pp3)
{
int temp;
temp=*pp1;
*pp1=*pp2;
*pp2=*pp3;
*pp3=temp;
}
 se pero' vuoi proprio complicare il programma,
#include <malloc.h>
#include <stdio.h>
#include <conio.h>
void proc(int *, int *, int *);
void main(void)
{
int *p1,*p2,*p3;
p1=(int *) malloc(sizeof(int));
p2=(int *) malloc(sizeof(int));
p3=(int *) malloc(sizeof(int));
scanf("%d%d%d",p1,p2,p3);
proc(p1,p2,p3);
printf("%d%d%d",*p1,*p2,*p3);
free((void*)p1);
free((void*)p2);
free((void*)p3);
getch();
}
void proc(int *pp1,int *pp2, int *pp3)
{
 int temp;
 temp=*pp1;
 *pp1=*pp2;
 *pp2=*pp3;
 *pp3=temp;
}

Io l'avrei fatto cosi', senza l'uso della malloc,
Secondo  me  le  soluzioni  proposte  da  Paolo77  non sono corrette.
Il testo del quesito chiede una procedura che scambi i  contenuti  di
tre variabili di tipo puntatore.
Paolo77  nel  primo  esempio  ha  fatto  una  procedura che scambia i
contenuti di tre variabili intere.
Nel secondo esempio la procedura scambia il  valore  delle  varaibili
intere  a cui puntano i puntatori.
A mio giudizio la soluzione di racale e' piu' vicina a cio' che chiede
il quesito, con qualche imperfezione.
void proc(int **, int **, int **);
main(){
int *p1,*p2,*p3;
p1=(int *) malloc(sizeof(int));
p2=(int *) malloc(sizeof(int));
p3=(int *) malloc(sizeof(int));
/*  scanf("%d%d%d",*p1,*p2,*p3);   (questo   forse   è   sbagliato)*/
scanf("%d%d%d", p1, p2, p3); /* 	QUESTO E' CORRETTO */
proc(&p1,&p2,&p3);
/*
 * MANCA  LA "FREE" DELLA MEMORIA ALLOCATA
 */
}
void proc(int **pp1,int **pp2, int **pp3)
{
/ * 
  * int temp;
  * NON   E'  CORRETTO  IL  TIPO,  DOVREBBE  ESSERE  DI  TIPO  int  *
  */
int * temp;
*pp1= temp;
*pp1=*pp2;
*pp2=*pp3;
*pp3=temp;
}
Recale, che esame devi sostenere ?
-- 
   THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
visit my home page:
http://web.tiscali.it/KilometroZero

 *pp3=temp;
che senso ha:
*pp1=temp; ??????
forse tu (GIGI) e Racale volevate dire:
temp=*pp1;
al limite!
Mah, esercizi strani ed inutili...
Tommy

 ha scritto nel messaggio
news:3e71b726...@10.1.6.20...


Io l'avrei fatto cosi' l'esercizio.. 
Ciao,
SoloOcchi
void funzione(int *temp1, int *temp2, int *temp3);
int main (void)
{
	int temp1 = 1;
	int temp2 = 2;
	int temp3 = 3;
	funzione(&temp1, &temp2, &temp3);
	printf("Funz dopo: %d, %d, %d\n", temp1, temp2, temp3);
}
void funzione(int *temp1, int *temp2, int *temp3)
{
	printf("Funz prima: %d, %d, %d\n", *temp1, *temp2, *temp3);
	int appo;
	appo = *temp1;
	*temp1 = *temp2;
	*temp2 = *temp3;
	*temp3 = appo;
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

temp=*pp1;
Esatto! Questo e' corretto
Scusa Racale
