mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Problema interessante

Salve ragazzi avrei un problema nel realizzare il seguente programma in C.
Programma che permetta all'utente l'immissione di una serie di numeri interi
(massimo 100) e, una volta acquisiti tutti i numeri (fin qui una
stronzata!!), li visualizzi in ordine crescente.
Presumo che, almeno concettualmente debba scambiare le locazioni di ogni
singolo valore immesso nel vettore di interi.
Ma come?
Grazie anticipatamente!
L'output del programma dovrebbe essere piu o meno cosi:
Quanti numeri? 3
Immetti il 1 numero: 21
Immetti il 2 numero:13
Immetti il 3 numero:17
Numeri ordinati
13
17
21

 ha scritto nel messaggio
news:8ve72h$s6o$1...@pluto.sm.dsi.unimi.it...


Dovreste studiarvi gli algoritmi di ordinamento.
Vedi "Bubble sort", "Quick sort" etc.etc.
:-)

 Ma come?
Li metti in un array di interi, e poi lo ordini con qsort. Poi stampi
l'array in ordine.
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

> Ma come?


 
Prendi due numeri per volta, fai la diff 2o-1o e se <0 li scambi. Procedi 
finche' sono tutti >0... che algoritmo e'? Boh?
Buon Natale
-- 
Beh, naturalmente katamail non e' una caata!
E' un espediante contro sgraditi bot arraffa-indirizzi,
se volete contattarmi fate l'ovvia sostituzione.


Perchè non usare la funzione di libreria qsort() ?
HTH

esistono vari algoritmi per l'ordinamento di dati, i + famosi sono :
  - insertion sort
  - quick sort
  - bubble sort
  - merge sort
quest'ultimo è il più efficiente, ma anche il più complicato.
il bubble sort è meno efficiente del merge, ma se non devi manipolare una
lista estremamente lunga va benissimo.
  il concetto è questo :
si confrontano i primi 2 elementi della lista, e se il primo è più grande
del secondo, si scambiano attraverso una funzione di swap (passando i
puntatori agli elementi) :
  void swap(int*a,int*b){
    int temp;
    temp=&a;
    &a=&b;
    &b=temp;
  }
si fa la stessa cosa con il secondo e il terzo, e così via, fino al
penultimo e l'ultimo.
ora, sicuramente l'ultimo della lista è il più grande.
si dovrà ripetere lo stesso procedimento un'altra volta scartando l'ultimo
elemento(già ordinato), e così via scartando sempre un elemento ogni volta.
supponendo che tu abbia una lista di interi A[n] (numeri da A[0] ad A[n-1])
:
void sort(int*A,n){      /* A è il puntatore al primo elemento della lista,
n il numero di elementi */
  for(i=n-1;i>0;i--){
    for(j=0;j<i;j++){
      if (A[j]>A[j+1]) swap(*A[j],*A[j+1])
    }
  }
}
semplice ma efficace!
se ti interessa sapere di + sugli algoritmi di sort, sicuramente trovi
qualcosa sulla rete, altrimenti ti consiglio il libro "Algorithms in C"
ciao da Giovanni

 ciao da Giovanni
Buono, bella risposta... grazie
Edo

Newsgroup: it.comp.lang.c
Titolo: Aiuto.. Strutture.

Scusate,ma non riesco ha modificare con scanf il valore dell'elemento
stringa inizializzato in precedenza.
Dove sbaglio?
Grazie.
#include <stdio.h>
main()
    {
    struct dati{
           char stringa[81];
           char a;
           char *ptstringa;
          }info={"Inizio",40,"Inizipunta"};
    info.ptstringa=info.stringa;
    scanf("Digita la Stringa:",info.stringa);
    printf("Output:%s\n",info.ptstringa);
    }

    scanf("Digita la Stringa:",info.stringa);
printf( "Digita la Stringa: " ) ;
scanf( "%s", info.stringa ) ;

Grazie mille!!!


L'istruzione corretta è scanf("%-s",info.stringa).
Il tuo programma si presta ad altre osservazioni, che trovi
nei commenti al listato che segue.
Spero ti sia utile.
gfb
/* struct.c */
#include <stdio.h>
/* per EXIT_SUCCESS/EXIT_FAILURE  vedi commento per main()*/
#include <stdlib.h>
/*
typedef struttura - permette di semplificare le
dichiarazioni e le eventuali modifiche che saranno
effettuate solo in questo punto del programma
*/
typedef struct tagInfo { /* Il tag non e' obbligatorio */
   char stringa[81];
   char a;
   char *ptstringa;
   } INFO;
/* dichiarazione funzione stampa struttura */
void print_struct(INFO * pStruct, char * msg);
/*
l' ultimo standard stabilisce che main ritorni
sempre un valore e vegna quindi dichiarato
come int main( int argc, char *argv[]) con
i parametri argc ed argv opzionali.
*/
int main()
{
/*
Dichiara, Inizializza e stampa struttura
ricoda che se fai
   info={"Inizio",40,"Inizipunta"};
allochi lo spazio per "Inizipunta" che
non e' previsto nella struttura.
I dati di tipo char vanno assegnati con
'<catattere>' es: a='A'
o con il cast esplicito
di un intero tra 0 e 255 es:  a=(char) 65
*/
INFO  info = { "Inizio", (char)65, NULL };
print_struct(&info,"Valori iniziali");
/* Chiede il nuovo valore di stringa */
fprintf(stderr,"Digita la nuova stringa: ");
info.ptstringa=info.stringa;
/*
se proprio vuoi scanf() togli i commenti
e cancella gets(info.stringa), ma ricorda
che gets() permette anche di inserire piu'
parole separate da spazi mentre scanf()
arresta la lettura al primo spazio che
incontra
*/
/* scanf("%s",info.stringa); */
gets(info.stringa);
/* stampa struttura modificata */
print_struct(&info,"Valori modificati");
/*
Le due istruzioni che seguono impediscono che Win98 chiuda
subito il Dos-Box, mantenedo i dati sullo schermo fino alla
pressione del tasto invio.
Se usi Linux/Unix o Dos 16 bit puoi cancellarle.
*/
fprintf(stderr, "Premi INVIO per uscire");
getchar();
/* Fine programma c/ istruzione di ritorno */
return EXIT_SUCCESS;
} /* end main()
/* Implementazione print_struct */
void print_struct(INFO * pStruct, char * msg)
{
fprintf(stderr,"\n%-s\n",msg);
fprintf(stderr,"Stringa (stampa
diretta):\n%-s\n",pStruct->stringa);
fprintf(stderr,"Carattere: %c - Peso decimale %d\n",
         pStruct->a,pStruct->a);
fprintf(stderr,"Puntatore (Indirizzo di memoria): %p\n",
         pStruct->ptstringa);
fprintf(stderr,"Stringa (stampa dal puntatore):\n");
fprintf(stderr,"%-s\n",pStruct->ptstringa);
}
Newsgroup: it.comp.lang.c
Titolo: conversione da intero a binario...

Salve a tutti,
ho una variabile "int source" che contiene un numero intero (in base dieci).
Mi servirebbe costruire una funzione che inserisce nella variabile char 
dest[N] (N arbitrario o comunque sufficientemente grande)
la rappresentazione del valore di source in base binaria.
So che in C non esistono funzioni native per fare ciņ.
Per esempio se souce=45,
dovrą essere
dest[0]=1
dest[1]=0
dest[2]=1
dest[3]=1
dest[4]=0
dest[5]=1
Come posso fare?
Grazie a chi vorrą aiutarmi.
Ciao!
Mister ? 

rettifico:
...
dovrà essere
dest[0]='1'
dest[1]='0'
dest[2]='1'
dest[3]='1'
dest[4]='0'
dest[5]='1'

http://www.teachingonline.it/articoli.php?IdArticolo=46
E' per php, ma lo potresti adattare senza problemi.
Francesco
-- 
      Teaching OnLine 
Corsi online di programmazione
Php, Asp, C, C++, Visual Basic, Delphi
Linux Shell Programming
------------------------------------
http://www.teachingonline.it

 Francesco
non mi apre la pagina.
sai se ci sono dei problemi sul server?
grazie. 

 la rappresentazione del valore di source in base binaria.
Ciao, puoi provare con gli operatori bit a bit. 
Pseudo-codice, se non erro :-))
for (k = 0; k < 8 * sizeof(int); k++) {
    if (source & (1 << k)) dest[k] = '1';
    else dest[k] = '0';
}
 Ciao
 Federico

 }
ciao,
ho qualche difficoltà a capire.
perché cicli per 8*sizeof(int) ?
che operatore è " << " ?
grazie.
ciao 

On Thu, 8 Sep 2005, Mister ? wrote:

Ciao,
 "<<" e' lo shift a sinistra. Nel loop valuto il k-esimo bit di "source"
(partendo dal bit meno signiuficativo) e lo memorizzo in dest[k], secondo
la notazione che avevi richiesto.
 Ciao
 Federico

complimenti per la stringatezza della tua funzione :-) 

 complimenti per la stringatezza della tua funzione :-) 
Grazie! Ho preso esempio da qui: 
http://www.es.ioccc.org/main.html
Scerzo!! Magari riuscissi a scrivere roba simile :-)
 Federico

Federico Zema ha scritto:

Allora guarda questo :-)
http://www.99-bottles-of-beer.net/language-brainfuck-101.html
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 grazie.
Non so, io da locale lo vedo, dall'esterno non saprei. Ma forse e' per
questo che ho notato una riduzione del numero di visite al sito. Non
saprei. Puoi verificare e farmi sapere che succede?
Ti ringrazio


 la rappresentazione del valore di source in base binaria.
Forse qualcosa del tipo:
int i;
...
for (i = sizeof dest - 2; i >= 0; source >>= 1, --i)
        dest[i] = '0' + (source & 1);
dest[sizeof dest - 1] = 0; /* se dest e' un ASCIIZ */
-- 
error: can't open ~/.signature

Ho trovato questo programma che mi sembra perfetto per quello che vuoi
fare tu. Utilizza la funzione di sistema strtol, che permette di
modificare la base in cui scrivere il numero.
Il link al programma: 
http://paul.rutgers.edu/~rhoads/Code/bascnvrt.c
Ciao

 ha scritto nel messaggio 
news:1126275818.9...@z14g2000cwz.googlegroups.com...

grazie mille, č proprio quel che fa per me.
ciao! 

 Francesco
adesso si vede.
ciao! 


complimenti anche a te per la tua capacità di sintesi!
ciao e grazie!
Newsgroup: it.comp.lang.c
Titolo: aggiungi

/*
Un saluto festoso a tutto il NG,
posto il mio problema sperando nel vostro consiglio...
ho la necessita di creare o aggiornare un archivio dinamico di nomi
questi nomi vengono numerati prograssivamente senza un record e separati
tra loro dal carattere '*'
io non riesco a capire perche questo codice genera un
--Null pointer assignment
quando esce dal programma... help me please...
ciao duido
*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void main(void)
{                      
	char *azioni;
	char nome_file[5];
	char *azione;
	int lunghezza,buf,x,num;
	strcpy(azioni,"");
	strcpy(azione,"Primo");
	strcpy(nome_file,"0001");
	strcpy(azioni,azione);
	strcat(azioni,nome_file);
	strcat(azioni,"*");
        puts(azioni);
 
	strcpy(azione,"Secondo");
	strcpy(nome_file,"0002");
	strcat(azioni,azione);
	strcat(azioni,nome_file);
	strcat(azioni,"*");
	puts(azioni);
	strcpy(azione,"Terzo");
	 if(strlen(azioni)){   //aggiungo all'archivio disponibile
		  for(x=0,num=1;*(azioni+(x*sizeof(char)))!='\0';x++)
            if(*(azioni+(x*sizeof(char)))=='*')
					 num++;
		  itoa(num,nome_file,10);
		  lunghezza=strlen(nome_file);
        while(lunghezza<4){	//obbligo il nome del file a 4 caratteri
				for(buf=lunghezza; buf ;buf--)
                nome_file[buf]=nome_file[buf-1];
            lunghezza++;
				nome_file[buf]='0';
        }
		  nome_file[4]='\0';  //chiudo il nome_file   
        strcat(azioni,azione);
    }
	 else{   //creo per la prima volta l'archivio
		  strcpy(nome_file,"0001");
        strcpy(azioni,azione);
	 }
	 strcat(azioni,nome_file);
	 strcat(azioni,"*");  
	 puts(azioni);
    getch();
}
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:53c3958fa12296426f9...@mygate.mailgate.org...

Devi dichiarare azione ed azioni come stringhe non come semplici puntatori a
caratteri.
Prova in questo modo e funziona:
void main(void)
{
char azioni[30];
char nome_file[5];
char azione[30];
int lunghezza,buf,x,num;
........
.............
................
oppure le allochi dinamicamente nel codice, ma comunque non puoi lasciarle
in quel modo.

 in quel modo.
grazie antonio


 strcpy(azioni,azione);
CUT
secondo me devi allocare memoria ai puntatori a carattere...
azioni=(char *)malloc(x*sizeof(char));
//dove x è il numero di caratteri che vuoi allocare...
non ho guardato tutto il codice, e non ne sono sicuro ma mi sembra che per
stampare una stringa l'ultimo aelemento di quest'ultima deve essere NULL,
quindi l' ultimo_carattere='\0'.
ciao ciao diego
Newsgroup: it.comp.lang.c
Titolo: compilatore c

Qualcuno sa dirmi da dove posso scaricare un compilatore c?
Grazie in anticipo.

 Qualcuno sa dirmi da dove posso scaricare un compilatore c?
	MS DOS		
http://www.delorie.com
	MS Win32	
http://sourceware.cygnus.com
	UNIX		
http://gcc.gnu.org
	MacOS		
http://www.metrowerks.com
	Alla prossima,
		Marco

 Qualcuno sa dirmi da dove posso scaricare un compilatore c?
Leggi nelle FAQ (vedi firma)
ciao
Marco
--
Marco Coppo
University Of Sheffield
FAQ di it.comp.lang.c:
http://www.programmazione.it/linguaggi/c/itcomplangc.htm



ELENA CAMPOREALE wrote:

Qualcuno sa dirmi da dove posso scaricare un compilatore
c?

Grazie in anticipo.

Dunque se vuoi  ti posso mandare il turbo C++ per dos via mail anche
se è un po' grande ma vedo di comprimertelo e magari mandartelo
in due momenti diversi (ovviamente non uno oggi e l'altro fra 6 anni ^__^)!!!!!!!!

Cmq sappimi dire.

Se ti interessa è meglio che mi contatti via mail xchè
non controllo spesso le news!

mail: 
rex...@tiscalinet.it


Cya

RexRock

-- 
"Non li temete dunque; perche' non c'e' niente di nascosto che non debba
        essere scoperto, ne' di occulto che non debba essere conosciuto"
                                               (Matteo 10:26)

Newsgroup: it.comp.lang.c
Titolo: GAME DEVELOPING - cercasi programmatore

Cerchiamo   sviluppatori   aggiuntivi  per  lo  sviluppo  di  DRONES,
videogioco  multipiattaforma  (PC/Dreamcast/Alpha) in uscita nel '99 e
realizzato con il supporto di Digital e Compaq.
Requisiti necessari:
  Conoscenza approfondita del C++.
  Disponibilità a trasferirsi a Parigi per i prossimi 10/12 mesi.
Requisiti preferenziali:
  Conoscenza della programmazione grafica 3D.
  Conoscenza di DirectX.
La programmazione utilizzera` i seguenti ambienti:
  Microsoft Visual C++ (Windows NT, Windows 9x, Windows CE)
  Borland C++ Builder 3 (Windows NT, Windows 9x)
  MEL (Maya Embedded Language by Alias|Wavefront)
Lo sviluppo avra` luogo presso la nostra sede di Parigi, dove
ci occuperemo di fornire alloggio agli sviluppatori.
Per ulteriori riferimenti:
http://www.nigma.it/drones/
 (in lavorazione)
http://www.segadreamcast.net/previews/previews_drones.htm
http://www.sega-otaku.com/interviews/nigma.html
http://www.segadc.com/previews/drones/drones.htm
http://www.infiniteplanes.net/segaworld/previews/drones.htm
http://www.videogamers.com/meta/dec.htm
http://www.players-online.com/dcarea/drones-preview.htm
http://www.gecip.fr/katana/html/preview/drone.htm
Rispondete esclusivamente in email a 
soft...@nigma.it
.
Bye, DeathStar::CDS
*3d-coder*
c...@nigma.it
           [email]
www.nigma.it/deathstar
 [DeathStar HomePaGe]
www.nigma.it/trip99
    [The Real Italian Party 99]
www.nigma.it/drones
    [Drones Homepage]






Newsgroup: it.comp.lang.c
Titolo: Converire immagini

Con le SDL ho caricato un immagine .bmp in una Surface...ora vorrei
salvarla in formato JPEG compresso, qualcuno ha un idea di come
fare??Qualche libreria o metodo da utilizzare con C.che funzioni sotto
Linux...grazie...
Andrea
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Dovresti cercare nelle rete il file di libreria e l'header 
delle librerie jpeg, altrimenti non puoi fare nulla...
Poi devi cercare anche un tutorials... e studiarlo !!(certo !)
Ciao.
HellScreamer
C++C++C++C++C++
OpenGL 3D Coder
C++C++C++C++C++


Ho cercato un po delle librerie ijl...ne sai qualcosa??Non le trovo da
scaricare...sono tutte a pagamento...oppure le libjpeg...non so ora
cerco qualcosa con google..


Linux...grazie...
Non so se va per Linux ma prova a cercare CxIMage.

> Non so se va per Linux ma prova a cercare CxIMage.
Dovrebbero funzionare per linux...ma nonsono riuscito a
configurarle...ora provo con le ijg...


Newsgroup: it.comp.lang.c
Titolo: Lancio in esecuzione di un file - Istruzione equivalente

Ciao a tutti,
devo passare ad una funzione il nome di un file e mandarlo in
esecuzione:
Riesco nel mio intento con l'istruzione seguente:
system("file.doc"); //manda in esecuzione word e apre il file.doc
ma mi occorrerebbe qualcosa di piu' specifico...
Esiste qualcosa di simile???
A presto...
igino76

 Esiste qualcosa di simile???
Certo:
	system("file.xls");
E.

 ma mi occorrerebbe qualcosa di piu' specifico...
Esattamente cosa intendi? Se ti riferisci a "funzioni specifiche
della piattaforma che uso" puoi provare con ShellExecute e/o
CreateProcess. In questo caso ti consiglio di spostare l'argomento
su it.comp.programming.win32
A proposito: ho dedotto che sei su window per il fatto che hai parlato 
di word: sarebbe cosa buona indicare *sempre* su che piattaforma stai
lavorando (OS, compilatore, ...) quando chiedi aiuto! ;)
ciao
Giacomo

esecuzione:
ShellExecuteEx.
Consulta MSDN per maggiori ragguagli.
f/up su it.comp.programmare.win32
Newsgroup: it.comp.lang.c
Titolo: Domanda sui puntatori

Salve a tutti,
mi sono avvicinato da poco nel mondo del C e pian piano sto scoprendo un
linguaggio
molto utile e potente.
Vi scrivo per chiedervi informazioni sui una cosa che ho notato sviluppando
alcuni piccoli programmini.
Mi sono reso conto che quando passo il puntatore ad una funzione, cosě:
void MiaFunzione(char *MioPuntatore);
se eseguo delle semplici operazioni sul puntatore, tipo
MioPuntatore++;
All'esterno della funzione questa variazione non viene vista.
Se invece faccio la stessa operazione senza passare il puntatore come
argomento della funzione le modifiche vengono rilevate anche all'
esterno della funzione.
Direte: Bravo, se sai giŕ che č cosě perchč vieni a rompere qui?
Giusto, il problema e che vorrei sapere il motivo di questo comportamento
considerando che
in tutti i libri del C che ho letto il passaggio di un puntatore in una
funzione viene definito come un passaggio per riferimento e non per valore.
Forse la cosa e banale ma essendo all'inizio alcune cose mi ancora mi
sfuggono.
Grazie
Gianni


con questa modifichi l'indirizzo del puntatore, non la zona di memoria allocata.
Quando ritorni il valore dell'indirizzo rimane quello che gli hai passato,
quindi resta uguale.
Adieu,
-- 
Lestat de Lioncourt  -- a.k.a --  Ciro Mattia Gonano
 Undergraduate student in Computer Science at University of Bologna
 IHGGer #1049   <=>  ICQ#: 52631406   <=>   URL: 
http://www.CS.UniBO.It/~gonano
 Debian admin at 
Students.CS.UniBO.It
 <=> look at headers for my JabberID & GPG

MioPuntatore++;
Il parametro formale MioPuntatore ti fa accedere, all'interno della
funzione, non al valore della variabile puntatore passata, ma alla
*copia* del valore della variabile puntatore passata e memorizzata
nello stack.  Questo significa che effettuare un incremento del
parametro, all'interno della funzione, significa variare il valore
copiato nello stack, locale alla funzione, non quello della variabile,
nel corpo della funzione chiamante.  
Ben diverso sarebbe, invece, se tu scrivessi:
*MioPuntatore = *MioPuntatore + 1;
Questo significherebbe sfruttare il passaggio per riferimento, nel tuo
caso no.

 MioPuntatore++;
Chiarimento.
In C i parametri alle funzioni sono passati per "copia". Il puntatore 
consente in qualche modo di passare un riferimento; ma il riferimento è 
l'oggetto puntato, non il puntatore stesso che rimane una variabile passata 
per valore.
MioPuntatore++; è una operazione che modifica il valore del puntatore, non 
l'oggetto puntato. In particolare modifica la copia nello stack, quindi il 
puntatore originale rimane inalterato.

funzione viene definito come un passaggio per riferimento e non per valore.
Il termine "riferimento" e' relativo al dato indirizzato dal
puntatore, e non al puntatore stesso.  Passare un puntatore ti
permette di modificare i dati puntati, il puntatore invece viene
passato per valore e pertanto non verra' modificato.
Comunque puoi sempre usare un puntatore a puntatore.
ciao, acc.   
a...@libero.it
Newsgroup: it.comp.lang.c
Titolo: lista di stringa semplice

sono molto scarso col C
potete spiegarmi perchè nn va?
sono 2 file
PRIMO FILE list.h
#include <stdio.h>
#include <stdlib.h>
typedef char DATA;
struct linked_list {
	DATA	d;
	struct linked_list *next;
};
typedef	struct linked_list	ELEMENT;
typedef	ELEMENT			*LINK;
SECONDO FILE list.c
#include <stdlib.h>
#include "list.h"
main()
{
	char *a;
	a = hello;
	string_to_list(a);
}
LINK string_to_list(char s[])
{
	LINK head;
 
	if (s[0] == '\0')
		return NULL;
	else {
		head = malloc(sizeof(ELEMENT));
		head -> d = s[0];
		head -> next = string_to_list(s + 1);
		return head;
	}
}

 }
all'uscita di string_to_list si perde tutto quello che hai allocato.
Credo sia tutto...
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

ma io sto usando gcc e linux
ecco l'errore
bash-2.05b$ gcc listo.c -o listo
listo.c: In function `crea':
listo.c:18: error: incompatible types in return

 listo.c:18: error: incompatible types in return
Questo e' l'elenco degli errori che ottengo compilando
il codice cosi' come l'ho preso.
list.c: In function `main':
list.c:8: `hello' undeclared (first use in this function)
Questo e' dovuto al fatto che (come gia detto) hello va messa tra
doppi apici.
list.c:8: (Each undeclared identifier is reported only once
list.c:8: for each function it appears in.)
list.c: At top level:
list.c:13: warning: type mismatch with previous implicit declaration
list.c:9: warning: previous implicit declaration of `string_to_list'
list.c:13: warning: `string_to_list' was previously implicitly declared
to return `int'
string_to_list non ha prototipo ed e' definita dopo main() pertanto
il compilatore assume che restituisca un int. Visto che la funzione
in realta' restituisce un LINK, si incazza.


scusa...potresti dare una sistemata al mio?
voglio solo dalla stringa creare un lista
c'è qualche buona guida in giro in ita?

 		return NULL;
e mi torna:
hello
ello
llo
lo
o
era questo quello che volevi?
ciao
-- 
Er Baitch
"Live Your Life!!!" (Ring ain't a jail)
http://baitch.altervista.org/
Newsgroup: it.comp.lang.c
Titolo: Dov'è l'errore?

Ragazzi in questo programma data una stringa di "N" caratteri voglio
riscriverla senza il carattere "c". L'ho provato e non funziona, sapete
dirmi dov'č l'errore?
Grazie.
#include <stdio.h>
#define N 16
int stringa(int s[N], int c);
int main()
{
   int s[N], c;
   int i;
   clrscr();
   printf("Scrivi una stringa di %d caratteri : ", N);
   for(i=0;i<N;++i)
      scanf("%d",&s[i]);
   printf("Scrivi un carattere compreso nella stringa : ");
   scanf("%d",&c);
   stringa(s,c);
   return 0;
}
int stringa(int s[N], int c)
{
   int i;
   for(i=0;i<N;++i){
      if(s[i]!=c)
         putchar(s[i]);
   }
   return 0;
}

prototipo: char stringa(char s,char c) /*tu gli passi solo l'ultimo char*/
printf("Scrivi una stringa di %d caratteri : ", N-1); /*okkio
all'overflow*/
scanf("%c",&c); /*se esiste il %c perche' non usarlo :-)*/
int stringa(char s[], char c) /*gli passi il puntatore*/
spero vada bene, comunque:
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY!
USE AT YOUR OWN RISK!
Bye :-)
--
   LUNIVERSONONEUSERFRIENDLY
+-----------------------------+
|  
pugg...@labinf2.unica.it
  |
|     
kill...@yahoo.it
      |
|    
kill...@supereva.it
     |
+-----------------------------+

}
Se vuoi usare scanf(...) al posto di getchar() devi dichiarare
una variabile char di appoggio per metterci il carattere visto
che tu usi variabili intere per memorizzare il carattere.
Es.
    char ch;
    ...
    printf("Scrivi un carattere compreso nella stringa : ");
    scanf("%c",&ch); c=ch;
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

 dirmi dov'č l'errore?
Uno č sicuramente che una stringa in C č un array di caratteri, non di
interi.
EMG

 prototipo: char stringa(char s,char c) /*tu gli passi solo l'ultimo char*/
prototipo: char stringa(char *s,char c) /* CHIEDO SCUSA Avevo sbagliato pure
io :-) */


 {


Grazie al vostro aiuto il programmino gira perfettamente, ma se la stringa
fosse di interi cosa dovrei cambiare?
Ho portato tutti i tipi a interi e levato i getchar ma niente.
Grazie.
Newsgroup: it.comp.lang.c
Titolo: Leggere un file "in avanti" e "all'indietro"

Ciao a tutti,
sto lavorando ad un banalissimo programmino che prende due istruzioni da 
riga di comando: "p" e "n". "p" legge la precedente riga di un file di 
testo e la stampa a video, mentre "n" fa lo stesso con la successiva.
Ora, per quanto riguarda l'implementazione di "n" non ci sono problemi, 
ma come faccio a muovermi "all'indietro" su un FILE per implementare il "p"?
Grazie in anticipo e buona Domenica,
Giulio
--

 puntatori a char 
Oppure puoi memorizzare solamente l'offset di inizio delle righe, e poi 
le righe le leggi direttamente dal file. Oppure scorri il file 
all'indietro, carattere per caratter, finché non trovi il '\n' 
precedente. Per tutte queste soluzioni il file deve essere ad accesso 
casuale, e utilizzi le funzioni fseek, ftell.
E.

 Magari ho capito male quello che vuoi fare :-)
hai capito benissimo! :-)
Grazie dei consigli,
Giulio
--

 casuale, e utilizzi le funzioni fseek, ftell.
Ok (questa era l'unica cosa che avevo chiara). :-)
Ciao,
Giulio
--

 Ma... è possibile scorrere all'indietro? Con che funzione?
Sempre fseek...
E.

 Sempre fseek...
Ok, mi sto basando su questa documentazione della standard library:
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.12.html#fseek
Ora, se non ho capito male, con ftell() recupero la posizione corrente, 
e con fseek() mi sposto indietro finché non trovo un '\n', giusto? 
Andando ad occhio, mi verrebbe da dire: mi sposto indietro di una 
posizione e verifico (con un getc()) che alla posizione corrente ci sia 
un \n. Il che, però, mi risposta avanti di una posizione. Ok, poco male, 
basta spostarsi avanti di una posizione e poi di nuovo indietro di *due* 
posizioni. Ma il meccanismo mi pare vagamente "perverso". Non c'è un 
altro modo? Oh, se sto dicendo stupidaggini (assai probabile), ditemelo, 
eh! :-)
Ciao e buonanotte,
Giulio
-- 

 e con fseek() mi sposto indietro finché non trovo un '\n', giusto? 
Potresti fare qualcosa del genere:
void prevLine(FILE *fp) {
	long pos=ftell(fp);
	if (pos==0)
   		return;
	do {
		pos--;
		fseek(fp,pos,SEEK_SET);
		if (pos==0)
			return;
	} while (fgetc(fp)!='\n');
}
Se hai molto a cuore le questioni di efficienza, invece di leggere un 
carattere alla volta dovresti utilizzare un buffer e leggere molti 
caratteri e poi cercare il '\n' nel buffer;
E.
Newsgroup: it.comp.lang.c
Titolo: lista conactenata

Salve, se qualcuno mi puo aiutare mi fa un favore GRANDISSIMO! Ho una lista
concatenata la cui struttura è quella di seguito, e devo scrivere una funzione
(ripristina) che mi prende questa lista e mi restituisce una lista che ha:
i nodi (listhead->riga) attaccati, oppure i nodi (listhead->colonna) attaccati,
ad esmpio la lista di uscita deve essere del tipo:
[3 7],[11,7],[6,7],[6,34],[6,12],[6,10],[6,89],[89,11],[11,16],[90,16]....
Io ho scritto questa funzione, ma non mi da risultato; ossia non ci sono errori
di sintassi, ma è come se ciclasse all'infinito.
Vi prego aiutatemi!!!
Ciao. Federico
 
struct elemento /* rappresenta il record della lista */
{
 int riga;      
 int colonna;   
 int etichetta;
 struct elemento *next; 
 struct elemento *prec;
 
};
typedef struct elemento ELEM;
ELEM *ripristina(ELEM *listhead)
{
	ELEM *p;
	ELEM *q;
	ELEM *r;
	int trovato;
	p=listhead;
	q=listhead->next;
 
	while (q!=NULL)
	{
		if((p->riga == q->riga) || (p->colonna == q->colonna))
		{
			p=p->next;
			q=q->next;
 
		}
		else
		{   
			r=q->next;
 
 
 
 
			trovato=0;
 
			while (r!=NULL && trovato==0)
			{
				if((p->riga == r->riga) || (p->colonna == r->colonna))
				{
					p->next=r;
					r->next=q;
					(r->prec)->next = r->next;
					p=p->next;
					trovato = 1;					
				}
 
				else
				{
					r=r->next;
					trovato=0;
				}
			}
		}
	}
 
  return(listhead);
}
-- 
Posted from 
ppp-97-155.24-151.libero.it
 [151.24.155.97] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 }
Ciao,
Cecco

 r->prec = p;
Ed anche:
q->prec = r;

Newsgroup: it.comp.lang.c
Titolo: indirizzo puntatore

Salve a tutti,
vorrei sapere se è possibile settare l'indirizzo di un puntatore, e se si
come.
Sono alle prime armi, ho una funzione che come parametri vuole un
puntatore ad una area di memoria, quindi vorrei settargli l'indirizzo
dell'area di memoria interessata, ma non so come si fa.
Grazie.


Puoi postare il codice? O spiegarti meglio? Cosi` non e` molto chiara la 
situazione...

 dell'area di memoria interessata, ma non so come si fa.
Okkio, perché se l'area alla quale punti non è allocata o è nel kernel 
space, rischi di fare paciughi.
-- 
asettico (aka Roberto) [
http://www.rossomaltese.it/
]
GPG fingerprint [ BA20 8C8D 7712 9D9A 57F3  A96A A7BE 905C 1CB9 26BA ]
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/IT/O d++(-) s:+>: a34 C++$ ULAVH*++$>++++ P+ L+>++++ E--- W++(-) N(++)
o? K-? w(---) !O M@ V@ PS+@ PE- Y? PGP->++ t+++ 5? X++ R tv+ b+ DI(+)
D++(---) G(-)>-- e>++++ h---() r++ y+++*
------END GEEK CODE BLOCK------

 Dove 0xabcd è l'indirizzo esadecimale dell'area alla quale vuoi puntare.
Nope: ci vuole il cast. Puntatori e int sono tipi diversi, anche se la 
conversione (esplicita) e` possibile.
    char *punt = (char *) 0xabcd;
Questo e` lecito, anche se il risultato e` assolutamente non portabile, 
in quanto la conversione e` dipendente dall'implementazione.

Correggetemi se sbaglio, ma in tutti i moderni sistemi operativi un 
processo puo' accedere solo alla memoria a lui riservata e in ogni caso 
non legge mai l'effettivo indirizzo (fisico) della memoria, visto che 
gli indirizzi reali sono sempre "coperti" dal s.o. e "tradotti" in 
maniera trasparente per il programma.


 maniera trasparente per il programma.
Si', e' vero.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */


L'unico problema e' se il valore del puntatore e' maggiore dalla grandezza
alocata per il processo stesso, dando un "segmentation fault".
Usare un puntatore non inizializzato provoca danni in quanto vai a scrivere
dove potresti non sapere che cosa c'e'.
E' molto improbabile che tu riesca a puntare all'interno del kernel in
quanto spazio protetto e non indirizzabile dall'esterno.
Come e' improbabile che tu punti ad un'area appartenente ad un altro
processo in quanto il "numero" dentro il puntatore e' relativo al tuo spazio
di indirizzamento: non e' un indirizzo fisico della memoria, ma bensi'
logico.
L'unico modo per puntare ad un'area del kernel e' essere parte del kernel
(ad esempio un device driver).
Tutte le volte che si accede ad un'area di memoria del kernel, da processo,
lo si fa con le chiamate di sistema passando come argomento handle forniti
dal kernel stesso.
ciao,
Nids

 maniera trasparente per il programma.
E' quello che so anch'io.
Marcello
---
--
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.560 / Virus Database: 352 - Release Date: 08/01/2004
Newsgroup: it.comp.lang.c
Titolo: C Reference in formato Winfile o HTML

Qualcuno sa indicarmi dove posso trovare un file HLP  o HTML con il
reference del C o del C++ ?
Grazie
-- 
Posted from 
smtp1.libero.it
 [193.70.192.51] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 reference del C o del C++ ?
Ne trovi una serie abbastanza buona su 
www.borland.com/techpubs
.
EMG

Newsgroup: it.comp.lang.c
Titolo: funzione esterna in una dll

Vorrei usare una funzione dichiarata in un .cpp dentro una dll, come devo fare?
Grazie
    Beppe

 ha scritto nel messaggio
news:94u6gs$8lv$1...@nread2.inwind.it...

Newsgroup: it.comp.lang.c
Titolo: Funzioni di grafica er ANSI C

In quale libreria trovo funzioni per usare finestre, colori ecc. come
si faceva con il Modula2 ???
Joyce
ICQ 10607234
Per una pera, una pera cazzo...
Per affrontare questa lunga giornata dura !

si faceva con il Modula2 ???
In nessuna libreria standard.
Devi fare riferimento alle particolari estensioni del tuo compilatore.
L'ANSI-C non contempla la grafica in modo standard.

 Per affrontare questa lunga giornata dura !
Questa non l'ho capita.
Newsgroup: it.comp.lang.c
Titolo: Creare una lista Aiuto date un occhiata

Sono un neofita del linguaggio c e mi sto sbattendo
da un po di girni con un problema..non mi si concatenano la lista...
mi date un'occhiata a sto codice...
Grazie mille
# include <stdio.h>
# include <unistd.h>
# include <string.h>
# include <stdlib.h>
/* programma per la creazione di una lista */
struct persone {char c[25];
           char n[25];
           int eta;
           char cf [17];
           struct persone *next;
           };
typedef struct persone  pp;
void crea_lista(pp **t);
void scansione_lista(pp **t);
int main()
{
pp *primo;
primo=NULL;
crea_lista(&primo);
getchar();
scansione_lista(&primo);
return 0;
}
void  crea_lista(pp **t)
{
char
    c1[25],n1[25],cf1[17],risp;
    int eta1;
    pp*temp;
    printf ("inserisci il primo elemento\n cognome:  ");
    scanf ("%s",c1);
    getchar();
    printf ("inserisci il secondo elemento\n nome:  ");
    scanf ("%s",n1);
    getchar();
    printf ("inserisci il terzo elemento\n eta:  ");
    scanf ("%d",&eta1);
    getchar();
    printf("inserisci il quarto elelmento\n codicefiscale:  ");
    scanf ("%s",cf1);
    getchar();
    (*t)=temp=(pp *)malloc(sizeof(pp));
    (temp)->next=NULL;
    (temp)->eta=eta1;
    strcpy((temp)->c,c1);
    strcpy((temp)->n,n1);
    strcpy((temp)->cf,cf1);
    temp=(temp)->next;
    printf("Vuoi Aggiungere un altro elemento ? (S/s) per confermare:  ");
    scanf ("%s",&risp);
    getchar();
    while((risp=='s')||(risp=='S'))
   {
    printf ("inserisci il primo elemento\n cognome:  ");
    scanf ("%s",c1);
    getchar();
    printf ("inserisci il secondo elemento\n nome:  ");
    scanf ("%s",n1);
    getchar();
    printf ("inserisci il terzo elemento\n eta:  ");
    scanf ("%d",&eta1);
    getchar();
    printf("inserisci il quarto elelmento\n codicefiscale:  ");
    scanf ("%s",cf1);
    getchar();
    temp=(pp *)malloc(sizeof(pp));
    (temp)->next=NULL;
    (temp)->eta=eta1;
    strcpy((temp)->c,c1);
    strcpy((temp)->n,n1);
    temp=(temp)->next;
    printf("Vuoi Aggiungere un altro elemento ? (S/s) per confermare:  ");
    scanf ("%s",&risp);
    getchar();
    }
    }
void scansione_lista(pp **t)
  {
   pp *temp;
   temp=*t;
   while (!(temp==NULL))
   {
    printf("Cognome=%s  Nome=%s  Età=%d
CF=%s",(temp)->c,(temp)->n,(temp)->eta,(temp)->cf);
    temp=(temp)->next;
    getchar();
    }
   }

    temp=(temp)->next;
Anche qui, fai sempre "temp = NULL". Dovresti utilizzare un altro
puntatore, che in ogni esecuzione del ciclo punti al nodo pp costruito
nel ciclo precedente, e quindi fare:
    prec->next = temp;
    prec = temp;
dove "prec" è il puntatore in questione.
-- 
Saluti,
    Mardy
http://www.interlingua.com
Newsgroup: it.comp.lang.c
Titolo: dove appunti che parlano di...

Ciao a tutti,
mi servirebbero degli appunti dove si parli di liste, code e
pile in C.
E magari dove scaricare vari sorgenti.
Grazie tante.

Infinito wrote:

Prova su google:
http://directory.google.com/Top/Computers/Programming/Languages/C/
http://directory.google.com/Top/Computers/Algorithms/
Se esiste in rete, di sicuro e` li`
-- 
Danilo Piazzalunga
Linux Registered User #245762 at 
http://counter.li.org
mailto:
leo-...@ibero.it

, 
carm...@libero.it
 
says...

http://www.disi.unige.it/person/CataniaB/algo00-01.html

Newsgroup: it.comp.lang.c
Titolo: Compilatore

Salve,
vorrei chiedere una cosa riguardo al compilatore C99 uso dev c++ lultima 
versione, praticamente oggi stavo vedere a dichiarare una variabile 
all'intero di un ciclo for, pero non i si compila mi dice ('for' loop 
initial declaration used outside C99 mode).
Ce un modo per vedere se il compilatore e c89 o c99 su dev c++.
Grazie.
Albtoni 

albtoni ha scritto:

Il compilatore al quale si appoggia devc++ (gcc/mingw), dipendentemente 
dalla versione, potrebbe non supportare lo standard c99 in tutto (ma 
credo che debba essere una versione veramente vetusta) o in parte. 
Comunque, lo switch da linea di comando per abilitare l'eventuale 
supporto c99 è: -std=c99.
Ciao.

 ha scritto nel messaggio 
news:4502bb70$0$35071$4faf...@reader4.news.tin.it...


Newsgroup: it.comp.lang.c
Titolo: generatore numeri casuali

Ciao a tutti.
Ho un problema, nel senso che ho creato un programmino banale in C per
generare delle password di lunghezza a scelta dell'utente con i numeri
casuali.
In DOS (compilatore Borland Turbo C) usavo la funzione "randomize()"
all'inizio del programma per reinizializzare il generatore di numeri
casuali ad ogni avvio del programma, in modo da avere sempre password
diverse.
In linux pero' (compilatore GCC) questa funzione non esiste dichiarata
in "stdlib.h". Cosi' togliendola, anche in seguito a successivi avvii
del programma, lo stesso mi genera sempre la stessa password... :(
Come posso fare in linux a reinizializzare il generatore di numeri
casuali? C'e' qualche funzione equivalente a "randomize()" ?
Grazie
Saluti

 wrote in message
news:3a77d172...@news.libero.it...


   srand (stime);
Perche' non hai fatto direttamente
srand(time(NULL));
?
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

crea un punto di partenza per rand().
ok, grazie mille anche per l'esempio.
Saluti

Newsgroup: it.comp.lang.c
Titolo: Cerco compilatore C per 8051

Cerco compilatore per microcontroller 8051 ... so che in giro ce ne sono di
shareware...
grazie
gra...@tin.it


gra...@tin.it
--
              _-\
Ciao..........O-O
Poser Ivan (Africa Twin 750) ATIC 136
E-Mail    : 
iv...@elettra80.com
ICQ :4710428
Home Page : 
http://www.elettra80.com/IVAN/index.htm
Newsgroup: it.comp.lang.c
Titolo: Come ottengo il mio ip?

ciao
come si ottiene il proprio ip?
ho provato con getAdaptersInfo() ma mi da' l ip 192.168.0.2 cioè quello 
interno alla mia lan!(ho un router)
come faccio?
grazie ciao

 interno alla mia lan!(ho un router)
beh, ecco... e' quello il _tuo_ ip.
se vuoi l' ip pubblico, devi "chiederlo" al router stesso (ma la cosa e'
IT?).
-- 
Firma in costruzione

Newsgroup: it.comp.lang.c
Titolo: chiamare un programma esterno

Ciao a tutto il NG
Vorrei avviare un file exe dall'interno del programma main() 
penso che sia lo stesso problema che eseguire un comando di sistema; ma 
non mi ricordo piu' come si fa..
Qualcuno vuol darmi un aiuto.
Grazie
Attilio

 non mi ricordo piu' come si fa..
system("nome_programma");
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

Newsgroup: it.comp.lang.c
Titolo: AIUTO!!! creare un file specifcando dove!!

Salve sono un principiante che ha iniziato da poco a studiare questo
linguaggio
Ho un problema non sò come creare un file in un preciso punto delle
risorse del computer
se voglio creare u file io scrivo
#include<stdio.h>
main()
{
FILE *fid;
fid= fopen("pippo.txt",'w+');
return(0);
}
il problema è che il file viene creato nella stessa directory in cui
mando in esecuzione il programma. se devo ad esempio creare il file
dentra a C:\windows come devo fare............

dentra a C:\windows come devo fare............
indichi tutto il percorso del file in questo modo
fid = fopen("c:\\windows\\pippo.txt", "w+");
-- 
Lawrence "Rhymes" Oluyede (
rhy...@myself.com
)
"Per cambiare, per diventare un'altra
cosa dobbiamo prima sapere cosa siamo"
(Bruce Lee)

 risorse del computer
Andiamo bene... Una volta i file si creavano nel file system, e per
"risorsa" si indicava qualsiasi cosa messa a disposizione dal sistema
per svolgere un certo compito (es. memoria, socket, ecc.).
Che i professori attuali siano tutti CEPU/MSCE? :-(
Sconsolatamente,
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c
Titolo: un altro clueless

le faq dell'ng dove sono?

 le faq dell'ng dove sono?
http://www.news.nic.it/news-it/docs/glossario.html
http://www.news.nic.it/news-it/oth/aiuto-20.txt
http://www.news.nic.it/news-it/docs/moderaz1.html

 
http://www.news.nic.it/news-it/docs/moderaz1.html
Thanks
Newsgroup: it.comp.lang.c
Titolo: Copiare bit bit

Ho necessità di copiare un floppy. Fallendo qualsiasi tipo di tentativo
con programmi di creazione immagine.... fallendo anche con il comando dd
if=/dev/fd0 of=...... ho pensato di farlo io in c .... be come faccio ad
accedere al disco fisico (floppy) [in linux indirizzandolo a /dev/fd0?!
e in windows?... ] e copiarlo biti per bit?
Grazie!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 e in windows?... ] e copiarlo biti per bit?
In windows un bel diskcopy a: a: non ti va bene?? In linux, se hai fallito
anche con cat /dev/fd0 >file;cat file>/dev/fd0, dove file lo scegli tu, e
tra i comandi cambi il floppy, penso dovresti fare una open o fopen su
/dev/fd0; ma prima prova come ti ho detto, dovrebbe funzionare. Su windows,
se devi copiare il floppy su un file, allora non ti so dire; su linux basta
la prima parte del suggerimento, cat /dev/fd0 >file

 Grazie!
hai provato a montarlo e poi a copiare
i file?
se non va dd vuol dire che ha qlc problema
--
Denis
WebMaster di 
http://www.casafiorita.it
Fai i tuoi regali in modo unico ed originale!
Newsgroup: it.comp.lang.c
Titolo: Variabili (C e Api32), Grazie!

Salve a tutti!
Qualche tempo fa avevo chiesto se c'era un massimo di variabili definibili
in C e mi era stato detto di no.
Con queste dichiarazioni:
static HBITMAP hBitmap[8] ;
HDC hdc, hdcMem ;
PAINTSTRUCT ps ;
RECT rect ;
HMENU hMenu;
static int cxChar, x, cyChar, cxClient, cyClient, cxSource[8],
cySource[8];
char str[100];
POINT pt ;
BITMAP bitmap ;
HINSTANCE hInstance;
static HWND a, b, c, d, e, f, g, h, i, l, m;
Quando arrivo a utilizzarne i 2/3 mi si compila regolarmente il programma
ma poi mi scompaiono delle immagini e altre si vedono a metà, insomma, un
pasticcio!
Qualcuno sa come posso fare per utilizzare tante variabili o per risolvere
il mio problema?
Grazie,
GB
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 pasticcio!
"Quando arrivi a utilizzarne i 2/3"??
Che significa esattamente?

 Con queste dichiarazioni:
[cut]
Avrai sicuramente esaurito lo stack. Cerca tra le opzioni del tuo
compilatore come fare per aumentare lo spazio di stack e ricompila. Puoi
anche provare a dichiarare solo dei puntatori al posto degli array, es:
char str[100];
diventa
char *str;
str=malloc(100);
etc
-- 
-=[]=---iAN CooG/HokutoForce+TWT---=[]=-
It was my best experience. Now, only sex is left over... ;)

 compilatore come fare per aumentare lo spazio di stack e ricompila.
A spanne, quella roba non dovrebbe essere piu' di mezzo KB. Il problema
e' sicuramente da qualche altra parte (a meno che l'OP non usi un
compilatore giocattolo).
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: HeapSort VS MergeSort

Un piccolo particolare che mi sfugge: alla prova dei fatti, non dovrebbe
essere migliore l' HeapSort rispetto al Merge??
grazie a tutti!
Shaden

essere migliore l' HeapSort rispetto al Merge??
Dipende dal contesto... il merge sort ha alcuni vantaggi importanti:
 - e' altamente parallelizzabile
 - lavorando in modo "sequenziale" sui dati permette di
   realizzare ordinamenti efficienti di grandi quantita'
   di dati su cui non e' possibile fare accesso casuale
   o su cui l'accesso casuale e' molto piu' lento (es. files)
HTH
Andrea

 essere migliore l' HeapSort rispetto al Merge??
Potrei sbagliarmi, perche' e' da un po' che non riguardo questi algoritmi,
ma mi pare che l'Heap Sort lavorasse bene sugli array (usa un array come se
fosse un albero) ed eventualmente sugli alberi (mai provato, ma immagino
non sia troppo costoso da riadattare senza l'accesso sequenziale)... sulle
liste avresti un costo molto alto di ricerca degli elementi.
Il merge sort invece funziona benissimo sulle liste, perche' ottimizzato per
strutture ad accesso esclusivamente sequenziale.
L'heap sort se non sbaglio ha complessita' costante in tutti i casi di
2NlgN, mentre il Merge Sorg di NlgN... il che rende piu' conveniente il
secondo.
Se parli di array, ha senso valutare l'heap sort rispetto al quick sort, se
non ti sei sicuro di poter evitare il caso peggiore del quick sort (che
alza la complessita' a N^2, decisamente inaccettabile).
Se invece l'array ha particolari caratteristiche puoi operare addirittura in
tempo 3N e in qual caso mandi al diavolo tutti gli algoritmi divide et
impera (sperando che sia scritto giusto).
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Newsgroup: it.comp.lang.c
Titolo: leggere file e averne la dimensione in dos

ho la necessità di sapere la dimensione di un file in dos...
devo aprirlo in binario e poi contare quanti caratteri ci sono all'interno?
Ci sono altre possibilità magari per fare più in fretta?
Per andare ad un determintao byte usando poi la fseek basta scriverci il
byte dentro e lui ci va?

"Andrea Richiardi" <ari...@NOSPAMinwind.it>:

Controlla sulle sistem call del DOS se c'e' un metodo specifico oppure
puoi provare con lseek, lteel: prima di posizioni a OL a partire da
SEEK_END, poi leggi la posizione con ftell.
Mi pare il risultato sia un unsigned long.
Come potrai facilmente notare questo metodo funziona nei limiti in cui
funzionano ftell e sfeek, ovvero per file piu' piccoli di ULONG_MAX.
Per ovviare questo problema nel posizionamento su file si usano
fgetpos e fsetpos, che memorizzano la posizione in un oggetto di tipo
fpos_t, che potrebbe essere qualsiasi cosa, anche una struttura, il
che non la rende compatibile con il metodo che ti ho suggerito.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."
Newsgroup: it.comp.lang.c
Titolo: gestire file doc e dot

Ciao a tutti mi sono appena iscritto, avrei bisogno di sapere come si
gestiscono documenti Word in c o visual C++ 6.0.Cioè avere la
possibilità di scrivere quello che leggo da un file .txt in un doc
file, poter gestire i font e la stampa.
Sapete aiutarmi..
Grazie, alessandro

 ha scritto nel messaggio
news:1117793397....@g14g2000cwa.googlegroups.com...

Su questo sito:
http://www.wotsit.org/default.asp
trovi le specifiche di tutti i formati.
P.S.: E' inutile postare 2 volte lo stesso messaggio, non ti pare?

Newsgroup: it.comp.lang.c
Titolo: Programmazione concorrente (o quasi)

Come esperimento, volevo provare a far funzionare due funzioni
parallelamente senza sfruttare ne hardware (tipo clock int o
simili), ne fork o system call simili.
Ho pensato subito (programmo sotto Linux) a utilizzare la
funzione alarm che, dopo un tempo prefissato, invia un segnale
al processo che poi pensara' a gestirlo con un suo signal handler.
Nel programma ci saranno due funzioni che all'arrivo del segnale
commutano da una all'altra.
Problemone: come faccio via software a salvare lo stato di una
delle due funzioni, per poi ripristinarlo all'arrivo del segnale
successivo ?
N.B. l'idea del salvataggio dello stato e' tratta liberamente
dalla gestione degli interrupt dei sistemi operativi, i.e. all'arrivo
di un int di clock, parte l'interrupt handler che salva lo stato
del processo corrente, poi parte lo scheduler che sceglie un
processo, ripristina il suo stato e lo pone in esecuzione.
E' fattibile via software ?
O e' solo un mio viaggio mentale ? (come molti altri del resto :-)
Ciao
-- 
Zack
Stefano Zacchiroli
zacc...@cs.unibo.it
za...@comune.budrio.bo.it
ICQ# 33538863
"Never understimate the dark side"

 successivo ?
Non ne sono certo ma non credo che si possa fare via software e comunque 
non credo che  si possa fare in C. 
In particolare
Ci vorrebbe una istruzione per leggere l'IP (o come si chiama) e salvarlo 
da qualche parte, per poi 
ripristinarlo al segnale successivo. Ma se non ricordo male
in genere non esistono neanche in assembler (anche se dipende dalla macchina)
funzioni per leggere e/o scrivere IP,  tranne call, ret e forse push e pop
(comunque i miei ricordi di assembler sono abbastanza lontani per cui magari 
sbaglio). 
 
Quindi a meno che tu non voglia simulare un sistema in cui ciascuna funzione
debba essere interamente eseguita in un tempo inferiore ad un quanto temporale
e poi riiniziare da capo al quanto temporale successivo (sarebbe una
simulazione di un sistema real-time), non credo che
si possa fare.
Comunque altri pareri sull'argomento interessano anche me.
Marco Guidi.

Newsgroup: it.comp.lang.c
Titolo: numeri casuali e matrici

in che modo posso generare 10000 interi casuali tra 1 e 15 per poi 
scriverli in una matrice quadrata (quindi ipotizzo 1000x1000)?

 scriverli in una matrice quadrata (quindi ipotizzo 1000x1000)?
Io ipotizzerei un po' meno.
#include <stdlib.h>
...
int m[100][100];
for(i = 0; i < 100; i++) {
for(j = 0; j < 100; j++)
	m[i][j] = rand()%15 + 1;
}