Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-02-2013, 14:27   #21
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Beh, mi sembra che vim e The_ouroboros abbiano colpito un'altra volta

Stai leggendo un file che non e' nel formato che ti aspettavi. Nei miei test avevo creato il file in accordo col software, ma ho paura che si debba fare il contrario
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 15:14   #22
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Non ci sto capendo molto!
Quale sarebbe la soluzione?
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 18:20   #23
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Stek78 Guarda i messaggi
Non ci sto capendo molto!
Quale sarebbe la soluzione?
Prima di tutto bisognerebbe sapere quali sono le specifiche

1 - se hai scritto il software in base alle specifiche (quindi ti aspetti il numero delle coppie e poi le coppie stesse) allora il file non e' conforme. Potresti chiedere a chi ti ha fornito il file di esportarlo nuovamente (i vari ^M rappresentano una diversa codifica del newline, probabilmente il file e' passato da sistema a sistema);

2 - se la risposta e' "questo c'abbiamo", allora forse e' meglio capire cosa ci devi fare con il file. Supponendo che il file sia comunque nel formato <numero di coppie, <coppie>>, allora puoi semplicemente abbandonare la lettura mediante fscanf() e cercare qualcosa di piu' robusto.
Per esempio, se il file non e' troppo grosso (i computer odierni hanno un sacco di RAM) potrei leggere tutto il file in un botto, portandomelo in un buffer in memoria. Poi potrei scandire il buffer, scartando i caratteri che non mi servono e decodificando i numeri;

3 - Se oltre alla risposta "questo c'abbiamo" e' in dubbio anche il formato del file, non scrivere codice ma cerca di chiarire bene la struttura del file. Dopo di che puoi scrivere del codice elegante e robusto che lo decodifica
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 21:28   #24
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Allora il problema è che questo è un esercizio di olimpiadi d'informatica, dove nella descrizione del problema vi sono delle assegnazioni, ma quando vado a testarlo nel loro sistema non passa i test perché non legge il file correttamente.
Per esempio poi vi sono le assegnazioni che non vengono rispettate, di seguito il testo dell'esercizio:
Quote:
Descrizione del problema:
Il Commissario Basettoni ha presentato a Topolino le missioni che egli dovrà
svolgere segretamente nel corso dell'anno. Per ogni missione, oltre al luogo da
raggiungere, Basettoni ne indica la durata in giorni e la data massima entro
cui deve essere completata. In altri termini, la missione può iniziare in
qualunque giorno dell'anno ma deve durare esattamente il numero di giorni
indicato e terminare non oltre la data di scadenza.
Topolino, presa la lista delle missioni ricevuta da Basettoni, ordina tali
missioni in base alla loro data di scadenza. Quindi, numera i giorni dell'anno
da 1 a 365 (non esistono anni bisestili a Topolinia) e trasforma le date di
scadenza in numeri secondo tale numerazione. Per esempio, se una missione dura
15 giorni e deve essere svolta entro il 18 febbraio, Topolino la vede
semplicemente come una coppia di interi 15 49 (in quanto il 18 febbraio è il
quarantanovesimo giorno dell'anno).
Poiché può effettuare una sola missione alla volta, Topolino non sarà in grado
di svolgerle tutte, pur iniziando una missione il giorno immediatamente
successivo a quello in cui termina la precedente. Vuole perciò sapere il numero
massimo di missioni che è in grado di eseguire rispettando i vincoli sulla loro
durata e scadenza. Supponendo che Topolino già fornisca le coppie di interi
ordinate per scadenza (il secondo membro delle coppie), aiutatelo a calcolare
il massimo numero di missioni che può svolgere.
Per esempio, se ci sono quattro missioni, una di tre giorni da terminare entro
il 5 gennaio, una di quattro giorni entro l'8 gennaio, una di tre giorni entro
il 9 gennaio e una di 6 giorni entro il 12 gennaio, Topolino vi fornisce la
lista di quattro coppie 3 5, 4 8, 3 9 e 6 12. Il numero massimo di missioni che
può svolgere è pari a tre, ossia le missioni corrispondenti alle coppie
3 5, 3 9 e 6 12: la prima missione inizia il primo di gennaio e termina il 3
gennaio; la seconda inizia il 4 gennaio e termina il 6 gennaio; la terza inizia
il 7 gennaio e termina il 12 gennaio. (Notare che, scegliendo la missione
corrispondente alla coppia 4 8, Topolino può svolgere al più due missioni.)

Dati di input :
Il file input.txt è composto da N+1 righe. La prima riga contiene un intero
positivo che rappresenta il numero N di missioni presentate da Basettoni a
Topolino. Le successive N righe rappresentano durata e scadenza delle missioni:
ciascuna riga è composta da due interi d e s separati da uno spazio, a
rappresentare che la corrispondente missione dura d giorni e deve essere
completata entro l's-esimo giorno dell'anno.

Dati di output :
Il file output.txt è composto da una sola riga contenente un intero che
rappresenta il massimo numero di missioni che Topolino può svolgere rispettando
i vincoli su durata e scadenza.

Assunzioni:
- 1 <= N <= 100;
- 1 <= d,s <= 365;
- d <= s

Esempi di input/output: +-----------+------------+
| input.txt | output.txt |
+-----------+------------+
| 4 | 3 |
| 3 5 | |
| 4 8 | |
| 3 9 | |
| 6 12 | |
+-----------+------------+
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:04   #25
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ohé,

è un file misto Linux/Windows:



Notepad++ mostra che alcune righe sono terminate con CR/LF(Windows); altre con LF(Linux).

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:12   #26
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Ma io non capisco ancora da cosa sia dovuto!!!
Ok,può essere un problema del correttore on-line che ha generato sti input sbagliati,ma se io gli riscrivo è sempre lo stesso problema!
Mah
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:22   #27
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ti conviene usare un bell'automa come quello che abbiamo utilizzato nel contest 5:

http://www.hwupgrade.it/forum/showth...1799059&page=2

e pure più veloce :

http://www.hwupgrade.it/forum/showpo...2&postcount=21

http://www.hwupgrade.it/forum/showpo...5&postcount=24


Ultima modifica di Vincenzo1968 : 11-02-2013 alle 23:27.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:32   #28
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Scusa di che automa parli?
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:34   #29
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Stek78 Guarda i messaggi
Scusa di che automa parli?
Non ti fare impressionare dal nome. L'implementazione è una cavolata. Si tratta di un semplice ciclo while:

http://www.hwupgrade.it/forum/showpo...5&postcount=24

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:37   #30
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Ehm...
Grazie,ma...come avete capito ho cominciato da poco a programmare e ci sto capendo poco di tutto quel codice...
Come dovrei utilizzarlo?
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:38   #31
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Stek78 Guarda i messaggi
Ehm...
Grazie,ma...come avete capito ho cominciato da poco a programmare e ci sto capendo poco di tutto quel codice...
Come dovrei utilizzarlo?
Domani mattina ti posto il codice adattato per il tuo caso.
Mo me vag' a cucca'.

Buonanotte.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2013, 23:47   #32
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Grazie mille!
Mi fa' arrabbiare il fatto che le assunzioni delle variabili sono comprese tra 1 e 365 per d e s, quando poi nel file di test ci sono numeri del tipo 4450, i numero di righe compreso tra 1 e 100 e invece nel test 3500 etc.
Mah!
Comunque aspetto "tue notizie"!
...se c'è qualcuno con qualche altra soluzione si faccia avanti!
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 12:43   #33
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
L'automa mi dice che ci sono caratteri non validi.
Non è che il file "input.txt" è nel formato unicode(utf8)? Se si, bisogna utilizzare i caratteri unicode per leggere il file(wchar.h).
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 12:53   #34
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Questa cosa non la so', ma scusami non era già venuto fuori che ci fossero caratteri estranei?
Cmq io i numeri gli leggo come interi, cosa dovrei cambiare?
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 14:00   #35
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Stek78 Guarda i messaggi
Questa cosa non la so', ma scusami non era già venuto fuori che ci fossero caratteri estranei?
Cmq io i numeri gli leggo come interi, cosa dovrei cambiare?
Si ma con l'automa, visto che leggiamo un byte per volta, non importa se le righe sono terminate una con CR-LF e l'altra con LF.
Il discorso cambia se il file è in formato, per esempio, UTF-8. In questo caso bisogna utilizzare i caratteri unicode(definiti nel file wchar.h) che hanno la dimensione di due byte anziché uno. E bisogna utilizzare le apposite funzioni al posto di fgets, etc.

Si potrebbe implementare ina funzioncina per leggere il formato del file e utilizzare le funzioni appropriate, ASCII/Unicode, in base a quanto restituito dalla funzioncina.

Informati un po'; cerca di sapere in che formato è il file di input.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 14:46   #36
Stek78
Junior Member
 
Iscritto dal: Jun 2011
Messaggi: 25
Ok sto iniziando a capire, ma come dicevo prima non so' di che tipo è il file.
So' solo che è un file txt, che hanno creato per fare i test nel correttore on-line.
Ma siamo sicuri che sia questo il problema del caricamento sbagliato dei numeri in matrice?
Stek78 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 14:47   #37
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
m ai sottovalurare il formato e come enda la linea (LF o CR+LF)
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 14:55   #38
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Con questo file:
Quote:
5
21 8
55 89
34 2
89 13
3 89
L'output è questo:


Questo è il codice:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>

#define BUFFER_SIZE 4096

typedef enum tagStati
{
	S_ERROR = -1, S0, S1
} Stati;

int GetArraySize(const char *szFileName)
{
	int array_size = 0;
	FILE *fp;
	unsigned char buffer[BUFFER_SIZE + 1];
	int numread;
	int k;
	unsigned char c;
	unsigned char byteCR = 0x13;
	unsigned char byteLF = 0x10;
	

	fp = fopen(szFileName, "rb");
	if ( fp == NULL )
	{
		printf("Errore nell'apertura del file %s\n", szFileName);
		return S_ERROR;
	}

	numread = fread(buffer, 1, BUFFER_SIZE, fp);
	if (numread == 0)
	{
		fclose(fp);
		printf("Errore 4 nella lettura del file %s\n", szFileName);
		return S_ERROR;
	}
	*(buffer + numread + 1) = '\0';

	k = 0;
	c = *(buffer + k);
	array_size = 0;
	while ( c != '\n' )
	{
		if ( c >= '0' && c <= '9' )
		{
			array_size = array_size * 10 + c - '0';

		}
		k++;
		c = *(buffer + k);
	}

	fclose(fp);
	
	return array_size;
}

Stati DFA(const char *szFileName, unsigned int **a, int array_size)
{
	Stati stato = S0;
	FILE *fp;
	unsigned char buffer[BUFFER_SIZE + 1];
	int numblocks;
	int numread;
	char c;
	int k, x;
	int riga, colonna;
	int num;
	unsigned char byteCR = 0x13;
	unsigned char byteLF = 0x10;
	

	fp = fopen(szFileName, "rb");
	if ( fp == NULL )
	{
		printf("Errore nell'apertura del file %s\n", szFileName);
		return S_ERROR;
	}

	if ( fseek(fp, 0, SEEK_END) )
		return 0;

	numblocks = ftell(fp)/BUFFER_SIZE;
	if ( numblocks == 0 )
	{
		numblocks = 1;
	}
	else
	{
		if ( ftell(fp) % BUFFER_SIZE != 0 )
			numblocks++;
	}

	fseek(fp, 0, SEEK_SET);
	numread = fread(buffer, 1, BUFFER_SIZE, fp);
	if (numread == 0)
	{
		fclose(fp);
		printf("Errore 1 nella lettura del file %s\n", szFileName);
		return S_ERROR;
	}

	k = 0;
	c = *(buffer + k);
	k++;
	while ( c != '\n' )
	{
		if (c == '\0')
		{
			printf("Errore 2 nella lettura del file.\n");
			fclose(fp);
			return S_ERROR;
		}
		c = *(buffer + k);
		k++;
	}

	riga = colonna = 0;
	num = 0;
	x = 0;
	while ( x < numblocks )
	{
		c = *(buffer + k);
		k++;

		switch ( stato )
		{
		case S0:
			num = 0;
			if ( c >= '0' && c <= '9' )
			{
				num = c - '0';
				stato = S1;
			}
			else if ( c == '\0' )
			{
				return stato;
			}
			else if ( c == '\n' )
			{
				colonna = 0;
				riga++;
				if (riga >= array_size)
					return stato;
			}
			else
			{
				printf("Automa: Stato S0 errore sul carattere -> '%c' k -> %d\n", c, k);
				return S_ERROR;
			}
			break;
		case S1:
			if ( c >= '0' && c <= '9' )
			{
				num = num * 10 + c - '0';
			}
			else if ( c == ' ' )
			{
				a[riga][colonna] = num;
				num = 0;
				colonna++;
				stato = S0;
			}
			else if ( c == '\n' )
			{
				a[riga][colonna] = num;
				num = 0;
				riga++;				
				colonna = 0;				
				stato = S0;
			}			
			else 
			{
				printf("Automa: Stato S1 errore sul carattere -> '%c'\n", c);
				return S_ERROR;
			}
			break;
		}

		if ( k >= BUFFER_SIZE )
		{
			numread = fread(buffer, 1, BUFFER_SIZE, fp);
			if (numread == 0)
			{
				fclose(fp);
				printf("Errore 3 nella lettura del file %s\n", szFileName);
				return S_ERROR;
			}
			k = 0;
			x++;
		}
	}

	fclose(fp);

	return stato;
}

int main()
{
	clock_t c_start, c_end;

	int x, y;
	unsigned int **missioni;
	int array_size;
	Stati stato;
	char *szFileName = "inputISO.txt";

	c_start = clock();

	array_size = GetArraySize(szFileName);
	if ( array_size <= 0 )
		return;
		
	printf("\nNumero righe: %d\n", array_size);

	missioni = (unsigned int**)malloc(sizeof(unsigned int*)*array_size);
	if ( missioni != NULL )
	{
		for ( x = 0; x < array_size; x++ )
		{
			missioni[x] = (int*)malloc(sizeof(int)*2);
			if ( missioni[x] == NULL )
			{
				printf("Memoria insufficiente.\n");
				return S_ERROR;
			}
		}
	}
	else
	{
		printf("Memoria insufficiente.\n");
		return S_ERROR;
	}

	stato = DFA(szFileName, missioni, array_size);
	if ( stato == S_ERROR )
	{
		printf("L'automa ha restituito un errore.\n");
		return -1;
	}

	c_end = clock();
	printf("\nTempo impiegato per la lettura del file -> %5.5f secondi\n", (double)(c_end - c_start) / CLOCKS_PER_SEC);

	printf("\nGli elementi  della matrice:\n");
	for ( x = 0; x < array_size; x++ )
	{
		for ( y = 0; y < 2; y++ )
		{
			printf("missioni[%d][%d] -> %d\n", x, y, missioni[x][y]);
		}
		printf("\n");
	}
	printf("\n");

	for ( x = 0; x < array_size; x++ )
		free(missioni[x]);
	free(missioni);

	return 0;
}
Ma non funzionerà se il file in input non è in formato ANSI/ISO.

Se il file in input è in formato UTF-8 dobbiamo modificare il codice in modo da utilizzare i caratteri unicode.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 14:57   #39
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Ref: http://en.wikipedia.org/wiki/UTF-8
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2013, 16:08   #40
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Questa è la versione unicode:

cut




Ultima modifica di Vincenzo1968 : 12-02-2013 alle 18:28. Motivo: Eliminato codice buggato.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
Le immagini nell'occhio dell'uragano Mel...
Anche gli USA inseguono l'indipendenza: ...
TikTok: i content creator guadagneranno ...
Nothing Phone (3a) Lite disponibile, ma ...
Emissioni globali per la prima volta in ...
Bancomat lancia Eur-Bank: la stablecoin ...
NVIDIA supera i 5.000 miliardi di dollar...
I ransomware fanno meno paura: solo un'a...
Pixel 10a si mostra nei primi rendering:...
Intel Nova Lake-S: i dissipatori delle p...
1X Technologies apre i preordini per NEO...
Tesla Cybercab cambia rotta: nel taxi de...
L'industria dell'auto europea a pochi gi...
VMware tra cloud privato e nuovi modelli...
Amazon Haul lancia il colpo di genio: pr...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v