Aiuto problema esame

Salve, sono nuovo in questo sito vorrei un chiarimento su questo problema https://training.olinfo.it/#/task/abc_esame/statement

Sotto allego il mio codice che in locale risolve i casi d’esempio mentre sul sito del correttore non ho nemmeno un punto

#include <stdio.h>
int main() {
    int i,j,k,max1,max2,max3,max=0;
    int N;
    FILE *in;
    FILE *out;
    in=fopen("input.txt","r");
    out=fopen("output.txt","w");
    fscanf(in,"%d", &N);
    int A[N-1];
        for (i=0; i<N; i++)
    {
    	 fscanf(in,"%d", &A[i]);
	}
    if (N%2==0)
    {
    	for(j=0; j<N; j++)
    	{
    		if (j%2==0)
    		max1+=A[j];
    		else max2+=A[j];
		}
		if (max1>max2)
		max=max1+1;
		else max=max2+1;
	}
	else 
	{ for (k=0; k<=(N-1); k++)
	{
		if (k%2==0)
    		max1+=A[k];
    		else max2+=A[k];
	}
	if (max1>max2)
		max=max1;
		else max=max2;
	}

    fprintf(out, "%d", max);
 }

direi che
int A[N-1];
non va bene deve essere di N elementi, dichiaralo statico: viste le assunzioni può andar bene
anche int A[1000] non sarà un grosso spreco di memoria. Se proprio vuoi risparmiare dichiaralo di tipo char.
Oltretutto il modo per dichiarare un vettore dinamico non dovrebbe essere quello (almeno il mio compilatore da errore). (int *A; …)

In C++ fare int A[N]; è valido e alloca l’array sullo stack. In generale lo stack è abbastanza piccolo, quindi per allocazioni medio-grandi è sempre meglio usare l’heap chiamando new o malloc.
Dario

2 Mi Piace

Grazie per la precisazione, comunque al mio compilatore dichiarare int A[N]; dove N è una variabile non piace affatto:
con il seguente codice:

main()
{
int N=100;
int V[N];

il mio compilatore segnala:

1>------ Inizio compilazione: Progetto: fornitori, Configurazione: Debug Win32 ------
1> struct_fornitori.cpp
1>e:\2018progcpp\fausto\fornitori\fornitori\struct_fornitori.cpp(37): error C2057: prevista espressione costante
1>e:\2018progcpp\fausto\fornitori\fornitori\struct_fornitori.cpp(37): error C2466: impossibile allocare una matrice di dimensione costante 0
1>e:\2018progcpp\fausto\fornitori\fornitori\struct_fornitori.cpp(37): error C2133: ‘V’: dimensione sconosciuta
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

Rivedendolo credo sia un’estensione del C++ fatta da g++, quindi probabilmente il tuo compilatore (che sembra il compilatore microsoft) non la supporta.

2 Mi Piace

Si credo anch’io sia così e sicuramente il mio compilatore è microsoft.
Saluti

I ‘variable-sized array’ sono validi in C ma non in C++, ma g++ li permette (a meno che non si specifichi -pedantic)

1 Mi Piace

Al compilatore microsoft neanche in C

Controlla che stai davvero usando C, perché con visual studio (da quel che ricordo) se usi l’estensione .c comunque lui te lo compila in C++

1 Mi Piace

Qui si dice che, e le mie prove lo confermano, che a seconda delle estensioni dei sorgenti si usano compilatori diversi: https://www.quora.com/How-can-I-run-c11-or-c99-in-Visual-Studio-2017

Addirittura un sorgente così:

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

int main(){
	int a,b;
	
	a=1;b=2;
	int c;
	c=7;
	return 0;
}

se salvato con estensione cpp compila con estensione C no (le dichiarazioni delle variabili locali a una funzione vanno tutte in testa in C)

Ah, in effetti il link che hai postato spiega che il compilatore C di visual studio non supporta (volutamente) tutte le feature di C, quindi magari gli array variable-sized sono semplicemente una delle feature che Microsoft ha deciso di non supportare :slight_smile:

non risolve neanche i casi base, non è un problema del correttore