Jump to content
Rpg²S Forum
  • 0

Alcuni dubbi sulle basi del C


Tio
 Share

Question

Allora: ho iniziato a seguire il corso di programmazione e oggi abbiamo iniziato a creare i nostri primi programmi.. cose molto semplici, però non ho preso appunti a penna e non mi ricordo alcuni comandi di base che avevamo usato nell'esercitazione (e che dovremo usare agli esami).. vi dico precisamente qual'è il problema.

 

Usando Dev-C++, stavo cercando di costruire questo programma semplicissimo:

#include <stdio.h>
main(){int a,b,c;
printf("scrivi 3 numeri e trovo la somma\n");
scanf("%d %d %d",&a, &b, &c);
printf("\n%d", a+b+c);

  }

se premo f9 me lo fa partire, mi fa scrivere i numeri, premo invio e me lo chiude subito senza visualizzarmi la somma.. ricordo che in laboratorio prima della parentesi graffa finale avevamo scritto 2 righe, però non ricordo precisamente com'erano scritte.. mi pare che una fosse getchar() e l'altra fflushqualcosa.. però non ricordo precisamente come si scrivono, in che ordine e voglio sapere precisamente a cosa servono entrambi XD

grazie a tutti quelli che mi aiuteranno e scusate i dubbi scemi XD

EDIT: risolto xD le righe erano fflush(stdin) e getchar().. appena ho bisogno di altri aiuti (molto presto XD ) continuo ad usare sto topic..

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • Answers 101
  • Created
  • Last Reply

Top Posters For This Question

Top Posters For This Question

Recommended Posts

  • 0
AZZ... Capito ^^

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0
Io faccio matematica a Parma e gli esami del primo anno di programmazione erano a prova di scemo (anche se per la prova finale bisognava preparare un programma con classi e balle varie e ci voleva del tmepo), in compenso gli anni prossimi ho una barca di esami dove c'è da scrivere programmi da 1500 righe xD

fu BMX, Bator, e quant'altro

 

Niente firma dinamica...

Link to comment
Share on other sites

  • 0

ho appena scoperto di aver preso 25 nel pre-esame sui cicli XD

 

cmq ho appena una richiesta abbastanza scema, sempre sullo stesso esercizio XD

cosa cambia nell'equazione, se si cambia il valore della x? °_° perchè le equazioni di secondo grado si risolvono usando la famosa formula in cui la x non appare :/

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

Da quello che ho capito io, l'utente deve immettere 4 numeri:

- il coefficiente a;

- il coefficiente b;

- il coefficiente c;

- un valore per l'incognita x (compreso tra 0 e 2).

 

In pratica tu non devi risolvere l'equazione, ma assegnare alla x il valore inserito dall'utente e ai coefficienti gli altri numeri inseriti e vedere quanto esce. Se ad esempio io uso il tuo programma e scrivo:

 

4 - 7 - 2 - 1

 

il programma mi deve fare 'sto conto:

 

(4)*(1)^2 + (7)(1) + 2

 

solo che lo deve fare dieci volte, xkè in effetti a x devi sostituire:

 

0,1 - 0,2 - 0,3 - 0,4 - 0,5 - 0,6 - 0,7 - 0,8 - 0,9 - 1

 

 

 

... almeno così ho capito O.o

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0

Sei proprio un informatico!

le equazioni di secondo grado si risolvono usando la famosa formula in cui la x non appare :/

Che cavolo vuol dire!?

La formula di cui parli immagino sia quella che permette di trovare gli zeri di una funzione di secondo grado avendo i coefficenti, ma non è che negli altri punti la funzione non ci sia...

Altrimenti i grafici cosa rappresentano?

fu BMX, Bator, e quant'altro

 

Niente firma dinamica...

Link to comment
Share on other sites

  • 0
Sei proprio un informatico!

 

Che cavolo vuol dire!?

La formula di cui parli immagino sia quella che permette di trovare gli zeri di una funzione di secondo grado avendo i coefficenti, ma non è che negli altri punti la funzione non ci sia...

Altrimenti i grafici cosa rappresentano?

eh? xD

veramente intendevo la formula per trovare le radici °° quella -b+(o -)radice di delta fratto 2a :/

cmq ho fatto come ha detto Broly e pare che funzioni.. quindi grazie XD

 

un altro esercizio che mi sta complicando la vita (ormai siete diventati i miei tutor personali XD ) T__T

 

//Scrivere un programma che definisce tramite una define la costante P=3.141 .
//Costuire una funzione che calcoli il valore di Pigreco tramite approssimazione della seguente somma
//Pigreco = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 …
//e restituisca al main quanti termini della serie sono necessari per raggiungere il valore P.

#include <stdio.h>
#include <stdlib.h>
#define P 3.141

int grek(float)
{int n=0; float pigreco=4, divisore=1;

 while(pigreco>P)
 {pigreco=4/(divisore)-4/(divisore+2);
  divisore=divisore+4;
  printf("%f\n", pigreco);
  n++;}
  
printf("valore finale: %f valore P: %f", pigreco, P);
n=n*2;
return(n);
}


main()
{float z; int n;

printf("\n%d", grek(z));
  
  fflush(stdin);
  getchar();
  }

 

il problema è che il ciclo finisce praticamente subito.. quando so che invece il numero dei termini dovrebbe essere di 1690 circa °°

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

Il problema stà alla riga:

 

while(pigreco>P)

 

perché il valore di pigreco assume uno dopo l'altro i seguenti valori:

 

4.000000

2.666667

3.466667

2.895238

3.339683

2.976046

3.283739

3.017072

3.252366

3.041840

3.232316

3.058403

3.218403

3.070255

3.208186

ecc.

 

e quindi il ciclo while si interrompe quasi subito.

 

 

P.S.

per curiosità che compilatore usi?

Fiero membro della:

[img]http://img87.imageshack.us/img87/9409/yumenosoftgw5.png[/img]

[url="http://rpg2s.net/forum/index.php?showtopic=1529"][img]http://img225.imageshack.us/img225/8845/tenshibanxd5.png[/img][/url] [color="#0000FF"][b]A [i][url="http://yumeno.altervista.org/"][color="#9932CC"]YumeNo-Soft[/color][/url][/i] Production[/b][/color]
Link to comment
Share on other sites

  • 0

Bhe dato che usa il Dev-C++, il compilatore dovrebbe essere il MingW32 se non erro.

 

Cmq Tio, non mi è chiaro l'utilizzo che fai delle variabili z (nel main) e n (nella funzione). Per z, non capisco dove vada a finire. Cioè tu la passi come parametro alla funzione che si aspetta un float... ma senza nome!!! Mentre n deduco che sia il contatore dei cicli, ma non capisco perchè prima di "returnarlo" lo moltiplichi per 2...

 

Per quanto riguarda il ciclo, perchè non provi a fare una cosa tipo limite? Mi spiego: io ora non so a quale precisione di approssimazione devi arrivare... però potresti dire al ciclo while di continuare finchè non ci arrivi. Tipo: voglio una precisione di 10^(-4). While(P-pigreco > 0,0001)... Prova è solo un'idea...

 

EDIT: ah no la storia di n l'ho capita... scusa ^____^

Edited by Broly88

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0
UDDIU... E' VEROOOOOOOOOOOOOO XDDDDDDDDDDDDDD Edited by Broly88

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0

per determinare il numero di termini che approssimano devi eseguire una operazione per volta, non a 2 a 2, anche se le performance ne risentono (oltre al fatto che usiamo una serie particolarmente "lenta")

 

ho scritto questo programmino risolutore

#include <stdio.h>
#include <stdlib.h>

const double P = 3.1415926;

int pi(double e){
   double p=0;
   int i=0,n = 1;
   double d = 1.0;
   while((P/(double)4.0 -p)*(P/(double)4.0 -p)>e*e){
	   if (n%2) p+=(1.0/d);
	   else p-=(1.0/d);
	   n++;
	   d+=2.0;  
	   i++;
   }
   printf("pi:	%.10e\n",P);
   printf("my pi: %.10e\n",p*4);
   return i;
}

int main(){	
double epsilon = 0.000000001;
printf("Serie parziale a %d termini\n",pi(epsilon));
fflush(stdin);
getchar();
return 0;
}

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0
Allora la mia idea non era così idiota ^^

Il mondo è il cancro... Io la cura...

 

Il mio sport preferito:

Gli altri --> (T_T#)O==(^_^Q) <-- IO

 

I miei alias:

http://www.naruto-kun.com/images/narutotest/shikamaru.jpg

-----------------------------------------------------

http://www.naruto-kun.com/images/narutotest/rocklee.jpg

-----------------------------------------------------

http://www.ff-fan.com/chartest/banners/auron.jpg

 

Broly88's

http://pokejungle.net/other/pokepet/trainers/e4k2.png http://pokejungle.net/other/pokepet/Charizard.gif

Flame Dancer the level 99 Charizard!

 

http://img259.imageshack.us/img259/7446/rockleeoj1.gif http://img233.imageshack.us/img233/7449/sorajm1.gif

Link to comment
Share on other sites

  • 0

Tio che studia il C *-*

Io ho la prima prova domani, vediamo come va.

Hai fatto passi da gigante comunque, bravo :*

Mai rimanere in debito con i giudici di un contest...

 

 

http://img141.imageshack.us/img141/7035/renrenbf8.gif

Powered by Piccolo©

Link to comment
Share on other sites

  • 0

le ultime parole famose XD

 

qualcuno mi può spiegare la consegna di quest'esercizio? XD

• Costruire un funzione che normalizzi un vettore secondo l’intervallo [0,1].

La normalizzazione avviene tramite la formula:

 

v normalizzato = ( v – min )/( max – min )

 

dove min e max sono rispettivamente l’elemento minimo e massimo del vettore.

La lettura del vettore iniziale e la stampa del vettore normalizzato sono fatte da apposite funzioni.

non ho capito proprio che devo fare °° i vettori ho imparato ad usarli, ma questa cosa della normalizzazione non ho capito dove la devo fare :/

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0
void normalizza(float *source, float * dest,int n){
 int i;
 float min,max;
 min = max = source[0];
 for (i=1;i<n;i++){
	 if (source[i]>max) max = source[i];
	 if (source[i]<min) min = source[i];
 }
 for (i=0;i<n;i++)
	 dest[i] = (source[i] - min)/(max-min);
}

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0

quei * nella dichiarazione delle variabili servono per definire dei vettori? Oo

 

cmq altro esercizio che mi sta facendo impazzire XD

(non spaventatevi, mi serve aiuto solo per il punto 1.. poi una volta capito il ragionamento, il resto dovrei riuscire a farlo tutto da solo)

Considerare una matrice di interi S di dimensione Nx2 in cui la prima colonna riporta i numeri di matricola di N studenti e la seconda colonna il voto da essi riportato nell’esame di programmazione. Ad esempio :

 

mat voto

121 24

286 27

138 18

231 21

153 30

215 27

 

Scrivere un programma che legga e visualizzi la matrice e successivamente effettui le seguenti operazioni :

 

1) Letto il valore di un voto compreso tra 18 e 30, visualizzare le matricole di tutti gli studenti che hanno riportato quel voto, inviando un messaggio nel caso che nessuno lo abbia riportato.

2) Letto il valore di una matricola, verificare se lo studente con tale matricola ha sostenuto o no l’esame.

3) Scambiare di posto nella tabella lo studente che ha la matricola più alta con quello che ha la matricola più bassa ( scambiando anche i voti )

4) Ordinare la tabella per matricole crescenti (scambiando anche i voti) e ripetere l’esercizio 2 utilizzando la ricerca dicotomica.

 

io mi sono fermato al punto 1 XD

vi posto quello che ho fatto fin'ora, fate conto che ogni parte dell'esercizio la sto richiamando con una funzione e per adesso ho fatto solamente la prima:

 

#include <stdio.h>
#include <stdlib.h>
#define N 10

void ricerca(int nricerca, int v[N][2], int i, int j) //ricerca voti fra 18 e 30
{
 do {printf("scrivi un numero da cercare fra 18 e 30: "); scanf("%d", &nricerca);} while (nricerca<18||nricerca>30);
 for (i=0;i<N;i++)
  {for (j=0;j<2;j++)
	if (j==1 && nricerca==v[i][j]) printf("voto preso da matricola: %d ", v[i][j]);
	else printf("voto non presente");
  printf("\n");}}

int controllo() //controlla se una matricola ha sostenuto l'esame
{}

int controlloesame() //punto3
{}

int ordinamento() //punto4
{}

main()
{int v[N][2], i, j, nricerca;

printf("matricole  voto\n");
for (i=0;i<N;i++)
{for (j=0;j<2;j++)
{v[i][0]=100+rand()%300; v[i][1]=rand()%31; printf("%7d", v[i][j]);}
printf("\n");}

ricerca(nricerca,v, i, j);


fflush(stdin);getchar();}

 

dunque, nel main ho fatto in modo che il primo elemento della colonna (la matricola) sia un numero fra 100 e 399, e che il secondo elemento un numero fra 1 e 30 (non so se ci sono altri modi per farlo, questo è stato l'unico che ho trovato io XD )..

poi ho chiamato la funzione "ricerca": e lì c'è tutto il casino XD

a parte il fatto che mi stampa 2 volte ogni scritta (sia quelle nell'if sia quelle nell'else), mi scrive pure una matricola sbagliata (cioè che non corrisponde al voto scritto).. e come se non bastasse la matricola che mi scrive non appare neanche nell'elenco delle matricole òo

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

stampa due volte perché il for con il j è INUTILE e fai casino con l'if else, è chiaro che ci sono delle matricole con quel voto e matricole senza :P

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100

void ricerca(int a[N][2]){
int voto;
int trovato = 0;
int i;
do {
	printf("Inserire voto [18~30]: ");
	scanf("%d",&voto);
}while (voto<18 || voto > 30);

for (i=0; i<N; i++)
	if (a[i][1] == voto){
	   printf("Matricola %d\n",a[i][0]);
	   if (!trovato) trovato = 1;
	}
if (!trovato) printf("Nessuna Matricola ha preso %d.",voto);
}

int main(){
int db[N][2];
int i;
srand(time(0));
for (i=0;i<N;i++){
	db[i][0] = 100+i*i*i; //se li generi random hai bisogno di una funzione che elimini i doppioni
	db[i][1] = 18+rand()%13; //usa questo piuttosto che rand()%31
}
ricerca(db);
fflush(stdin);
getchar();

return 0;
}

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0

rieccomi qui con i miei bellissimi esercizi XD

dunque.. lunedì ho l'ultimo pre-esame su stringhe, files e strutture dinamiche..

e sono abbastanza incasinato con tutte XD

 

iniziamo dalle stringhe:

Scrivere un main che definisce due stringhe. Concatenarle utilizzando la funzione di libreria. Successivamente, scrivere la funzione di concatenamento wecat1 utilizzando i vettori.

Ripetere wecat2 utilizzando i puntatori. Visualizzare dal main i risultati resi.

La prima parte è un'idiozia, l'ho fatta senza problemi.. il problema è creare quelle 2 funzioni XD

 

#include <stdio.h>
#include <string.h>

char *wecat1(char *stringa, char *stringa2)
{char *k;

while (*k++=*stringa++);
while (*k++=*stringa2++);

return(k);}


main()
{char *stringa="ciao", *stringa2=" salve", *x, *x2;

printf("\nconcatenamento con funzione wecat1: \n");
x=wecat1(stringa,stringa2);
printf("%s",x);

fflush(stdin);getchar();}

per ora ho provato solamente facendo la funzione con i puntatori.. il problema è che non so come fare a decidere la dimensione di *k nella sua dichiarazione, e perciò mi da errore.. poi il ragionamento della while suppongo sia giusto, perchè *k si dovrebbe fermare alla fine di *stringa e poi partire da dove s'è fermato per *stringa2.. ma finchè non riesco a capire come dichiarare la dimensione di *k (che dev'essere un puntatore), non posso sapere nemmeno se il resto è giusto XD

 

Ora l'esercizio sui files:

Scrivere un programma che legge un vettore v di numeri interi e memorizza solo le componenti negative nel file di testo chiamato "prova". Rileggere dal file i dati memorizzati e visualizzarli sul video.

 

Scrivere un programma che, letti i dati contenuti nel file generato dall'esercizio precedente, scriva un file "prova2" contenente il doppio positivo dei valori precedenti. Rileggere dal file i dati memorizzati e visualizzarli sul video.

Sono riuscito a farlo quasi tutto, tranne una cosa.. quando vengono riletti i dati (dal file vengono ripassati al programma), l'ultimo dato del vettore me lo scrive 2 volte, e non capisco perchè..

 

#include <stdio.h>
#define N 5

main()
{FILE *fp;
int v[]={1,-2,3,-4,-5},i;

for(i=0;i<N;i++)
printf("%d) %d\n",i,v[i]);

 if(fp=fopen("prova.txt","w+"))
   {for(i=0;i<N;i++)
	 if(v[i]<0)
	 {fprintf(fp,"%d\n",v[i]);}

   rewind(fp);

   while(!feof(fp))
   {fscanf(fp,"%d",&v[i]);
   printf("%d\n",v[i]);}

   }
 else printf("errore in apertura");

fflush(stdin);getchar();}

 

supplico aiuto, grazie in anticipo XD

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

EDIT: dove scrivo BARRA0 leggi come \ affianco ad uno 0, il forum lo filtra

 

 

 

ti sfugge che dichiarare un puntatore è diverso dal dichiarare una stringa

 

Dichiarare una stringa:

1) char a[5] = "ciao"; dichiara una stringa di lunghezza 5 e riempita da {'c','i','a','o','BARRA0'}

2) char * a = "ciao"; dichiara un puntatore a char che punta ad una stringa posizionata in memoria, è una notazione equivalente a quella 1

3) char a[] = "ciao"; notazione equivalente a 1 e 2, crea una stringa grande quanto "ciao"

3) char a[N]; dichiara una stringa di lunghezza N

 

Dichiarare un puntatore:

3)char *a; //dichiara un puntatore a char che punta ad una regione casuale, ma la stringa NON esiste perché in memoria non l'hai piazzata

 

quindi

 

(te le piazzo così, non ho il compilatore sul pc, penso sia comprensibile e funzioni)

 

#include <stdio.h>
#include <string.h>

#define N 50

char * wecat1(char* dest,char*src);
char * wecat2(char* dest,char*src);

int main(){
char s1[N],s2[N],s3[2*N];
strcpy(s1,"Ciao ");
strcpy(s2,"Mondo!");
//primo caso
strcpy(s3,s1);
strcat(s3,s2);
printf("%s\n",s3);
//secondo caso
strcpy(s3,s1); //mettiamo in s3 il valore di s1
wecat1(s3,s1);
printf("%s\n",s3);
//terzo caso
strcpy(s3,s1);
wecat2(s3,s1);
printf("%s\n",s3);
fflush(stdin);
getchar();
return 0;
}

char [] wecat1(char dest[],char src[]){
long length = strlen(dest);
long max = strlen(src);
long i;
for (i=0;i<=max;i++) dest[length+i] = src[i]; //te l'avrei pure potuto scrivere compresso ma sono clemente XD
//il <= perché altrimenti non verrebbe copiato il 'BARRA0', a naso, provalo per aggiustarlo
return dest;
}

char * wecat2(char * dest,char * src){
long length = strlen(dest);
char * a = dest+length;
while (*a++ = *src++) { }
return dest;
}

 

non ho idea se funzioni o meno, comunque con i puntatori potevi benissimo lavorare come fossero vettori, per invece creare nuove STRINGHE on the fly devi usare malloc

quindi char * b; b = (char*) malloc(sizeof(char)*lunghezza);

e devi ricordarti di usare free(b); prima del return 0;

nota: ma sto cazzo di int nel main e return 0 li vuoi mettere? o ti vuoi far prendere per il culo dai tuoi colleghi perché non sai neanche rispettare lo standard?

è come vedere quei cavolo di siti con dtd xhtml 1.0 strict che poi usano <p> e <h2> -_-

 

 

esempio 2:

in generale: usa sempre fopen seguito da fclose

molto meglio aprirlo due volte che fare casini anche perché la scrittura FISICA avviene su fclose

 

l'errore avviene perché il file finisce con un'ultima riga vuota e non resettando v non hai idea di questo fatto

la soluzione è leggere non come interi ma come stringhe e poi convertire in interi, in questo modo se la stringa è un char 'BARRA0' non stampi niente, altrimenti stampi la conversione

Edited by Tio

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0

per la cosa del main: a lezione la prof non ce l'ha insegnato e quando faccio gli esami devo programmare come fa lei, perciò non la inserisco (come tutti quelli che hanno iniziato a studiare programmazione lì senza studiarlo prima, perciò non c'è rischio che la gente mi prenda per il culo se non metto return 0 XD ).. poi alla fine non cambia nulla visto che main è semplicemente una funzione principale che richiama altre funzioni, e non trovo il senso logico del perchè dovrebbe sempre rendere quello 0 alla fine.. sarà uno standard, ma non c'è nel mio libro di C, nè nelle dispense della prof XD

 

cmq: nel codice del primo esercizio che hai scritto tu, mi ha trovato solo un errore di sintassi.. ovvero:

char [] wecat1(char dest[],char src[])

che ho cambiato in:

char * wecat1(char dest[],char src[])

(anche se non ho capito il senso ma così funziona XD )

 

il problema poi è che il programma stampa:

Ciao Mondo!

Ciao Ciao

Ciao Ciao

 

mentre ogni caso dovrebbe stampare Ciao Mondo! ...

poi mi sto scimprando un po' per capire alcune cose, a dir la verità ho le idee ancora più confuse adesso, senza offesa ovviamente XD più che altro è un modo di programmare abbastanza diverso da quello della mia facoltà..

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

scusa ho sbagliato gli argomenti delle funzioni

wecat1(s3,s2);

wecat2(s3,s2);

 

come un pollo concatenavo ancora con la prima stringa ^_^, ora dovrebbe funzionare!

 

non parlavo di colleghi studenti ma di eventuali colleghi nel mondo del lavoro (se ci arriverai :P):

si tratta di programmare seguendo uno standard comune piuttosto che seguendo le manie dell'insegnante!

Se non capisci l'importanza di uno standard, per favore documentati o cambia università!

Se non ti fidi delle mie parole chiedi a programmatori o scandaglia la rete, non sono l'unico che la pensa così ... http://www.eskimo.com/~scs/readings/voidmain.960823.html

-Perché secondo me è grave non mettere int main e return 0?

Immagina che tu abbia bisogno di diversi programmi e li devi mettere "insieme", vedi ad esempio come funziona dev-c++: c'è un programma ide che richiama quando deve compilare il programma make che a sua volta richiama gcc o g++ che a loro volta richiamano altri eseguibili.

Per questo esistono gli standard, per garantire una comunicabilità

ora immaginati che esca fuori un casino in qualche processo, come lo scopro?

che ne so se il programma X salva l'errore in un file di log, ma quel file di log è usato anche da altri programmi, e così via? e soprattutto che ne sanno gli altri programmi? e il povero cristo utente finale?

c'è bisogno di una risposta IMMEDIATA e che prescinda il file system: la via più semplice e memory-optimized è di cambiare la risposta finale del programma!

quando andrai avanti e vedrai codici di altri vedrai che nell'INT main spesso utilizzano su errore return 1 o exit(1), non lo mettono per bellezza!

Perché tramite script batch o bash (oltre via codice di un tuo programma volto a debuggare!) è possibile eseguire un programma esterno e valutarne l'output tramite un comodo if

batch:

IF [NOT] ERRORLEVEL number command

 

NOT Specifies that Windows should carry out the command only if the condition is false.

ERRORLEVEL number Specifies a true condition if the last program run returned an exit code equal to or greater than the number specified.

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0

per ora non mi è tutto chiarissimo (anzi, diciamo pure quasi niente XD ), ma un giorno lo capirò XD

cmq, altro esercizio in cui continua a darmi errori..

 

Scrivere un programma che legge un vettore v di interi e lo memorizza, con un'unica scrittura, in un file binario. Rileggere dal file i dati memorizzati e visualizzarli sul video.

 

#include <stdio.h>
#define N 5

int main()
{FILE *fp;
int v[N]={3,8,6,4,2},i,n;


if (fp=fopen("provabinaria.txt","w+b"))
 {n=fwrite(v,4,5,fp);

rewind(fp);

n=fread(v,4,5,fp);

fclose(fp);
  }
  else printf("errore in apertura");
  

fflush(stdin);getchar();

return 0;}

(ho messo int main e return 0, visto che bravo? XD )

 

scemenze a parte, il file di testo che mi viene creato non contiene i numeri all'interno del vettore, ma caratteri incomprensibili.. e non riesco a capire dove sia l'errore, visto che nella funzione:

fwrite(v,4,5,fp);

v è il "blocco" da prendere in considerazione, 4 è la dimensione di un int, 5 è la dimensione del vettore, fp è il puntatore FILE da prendere in considerazione.. e se tutto quadra, perchè mi stampa caratteri mai visti invece dei numeri del vettore?

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

  • 0

primo: ti ringrazio per l'int main ma identi ancora male

parentesi graffe:

o le usi dopo la funzione quindi

int main() {
  codice;
}

oppure sotto

int main()
{
  codice;
}

 

ma mai mettere il codice così!

int main()
{codice;
  altrocodice;
}

o

int main()
{
  blah;
altro;}

 

per il tuo problema mi AUTOQUOTO:

in generale: usa sempre fopen seguito da fclose

molto meglio aprirlo due volte che fare casini anche perché la scrittura FISICA avviene su fclose

quindi dimentica rewind che ha utilità solo per leggere la dimensioni.

una soluzione puo' essere:

 

#include <stdio.h>
#define N 5

int main()
{
FILE * fp = 0;
int v[N] = {3,8,6,4,2};
int i;

if (! (fp=fopen("testo.txt","wb"))) {
	  printf("Errore di scrittura!\n"); getchar(); return 1;
}
fwrite(w,sizeof(int),N,fp);
fclose(fp); //garantisce la scrittura
for (i=0; i<N; i++) v[i]=0; //azzeriamo l'array
if (! (fp=fopen("testo.txt","rb"))) {
	  printf("Errore di lettura!\n"); getchar(); return 1;
}
fread(v,sizeof(int),N,fp);
fclose(fp);
for (i=0;i<N; i++) printf("%d ",v[i]);
printf("\n");
fflush(stdin);getchar();
return 0;
}

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

  • 0
il file di testo che mi viene creato non contiene i numeri all'interno del vettore, ma caratteri incomprensibili.. e non riesco a capire dove sia l'errore, visto che nella funzione:

fwrite(v,4,5,fp);

perchè mi stampa caratteri mai visti invece dei numeri del vettore?

E' normale che faccia così, ti ricordo che hai aperto il file in modalità lettura/scrittura BINARIA e questo fa si che i numeri non siano leggibili semplicemente aprendo il file .txt.

 

@Keroro

come mai visto che tieni tanto agli standard poi non li rispetti? Lo standard c vuole che i commenti siano:

/* commento */

e non:

// commento

che è lo standard del C++

N.B.

Ovviamente scherzo lo faccio sempre pure io, mi è venuto spontaneo visto che il mio Prof. dell'università me lo dice sempre.

Fiero membro della:

[img]http://img87.imageshack.us/img87/9409/yumenosoftgw5.png[/img]

[url="http://rpg2s.net/forum/index.php?showtopic=1529"][img]http://img225.imageshack.us/img225/8845/tenshibanxd5.png[/img][/url] [color="#0000FF"][b]A [i][url="http://yumeno.altervista.org/"][color="#9932CC"]YumeNo-Soft[/color][/url][/i] Production[/b][/color]
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...