Devi applicarti, sforzarti
consegnare un programma "raffazzonato" non credo che dia una buona immagine
piuttosto che continuare a fare cose nuove devi migliorarti le tue basi
io a chi me lo chiede(va) rispondevo sempre:
quando credete di essere arrivati alla fine
Ri-prendete in mano il problema, riprendete in mano la soluzione, riprendete in mano il programma, e "sfrondate", tagliate tutto quello che potete, cancellate tutto quello che potete, riducete al minimo tutte le variabili, tutti i cicli, tutte i comandi
per ogni variabile domandatevi: Mi serve per cosa? cosa ci scrivo? cosa mi indica? da dove la vado a prendere l'informazione che ci scriverò dentro? Quando la userò?
Ricominciate da capo
Per ogni comando che scrivete domandatevi: perchè lo sto facendo? è proprio necessario? a cosa serve fare la cosa che sto facendo? e se non lo faccio?
Ricominciate da capo
state tranquilli che se fate così vedrete che il programma complicato lungo e pieno di comandi, si riduce a vista d'occhio, rimangono solo pochi comandi con poche variabili
vuoi vedere?
#include <stdio.h>
//#include <string.h> // non serve
//#define DIM 16 e quando la usi?
#define COSTANTE 15 // questo invece è una furbata, perchè permette di cambiare al volo il programma
// se per caso servisse in futuro
#define NOMEFILE "numeri.txt" // anche questa
int analizzanumero(int a, int b)
{
return ((a > 10) && !((a % 100) % b));
}
int main()
{
FILE* fp;
int z = 0;
int temp1 = 0;
int temp2 = 0;
fp = fopen(NOMEFILE, "r");
if(!fp)
{
printf("errore nell'apertura del file");
return 1;
}
while(fscanf(fp, "%d", &temp2) != EOF)
{
z++;
if(z)
{
if(!analizzanumero(temp2, COSTANTE) && analizzanumero(temp1, COSTANTE)) //avevo invertito questo if
// e io te lo ho semplificato
{
printf("%d %d\n", temp1, temp2);
}
temp1 = temp2; // lo scambio lo faccio qui, senza usare una variabile in piu'
}
// printf("\n"); troppi ritorni a capo, stonano, basta farli solo se stampi, nella if
}
fclose(fp);
return 0;
}
questo è il tuo programma, lo ho ri-preso in mano e mi sono domandato cosa non serviva a nulla, quando usavo una certa variabile, etc etc....
fa le stesse cose oltretutto con meno righe vuote in output...
il main è più o meno uguale a quello che avevi scritto tu, con quelche variabile in meno, ma sopratutto invertendo l'ordine tra lo scambio delle variabili e il test ho pututo eliminare una variabile, sarà poco, ma provati a scrivere per qualche "strana macchinetta" con poca RAM e anche quello conta
quello che è molto cambiata è la funzione
guardala e pensaci a come posso esserci arrivato
sappi che ci sono arrivato per "sottrazione" dalla tua,
eliminando di volta in volta le variabili e i test che "rispondevano sbagliato" alle domande che ho elencato prima
PS
una funzione di una sola riga usata una volta sola nella main in realtà serve a poco, basta scrivere la riga direttamente nella main
ma siccome la funzione è espressamente richiesta dalla consegna la ho lasciata......