QCM 2010 exo 3

Pourrais-je avoir un peu d'infos sur le test n°3 : mon algo marche pour les deux premiers et le deuxieme test me retourne erreur fatale sans plus de precision....

pareil mon algo retourne erreur fatale (mais dès le premier test) alors qu'il fonctionne très bien en local avec les deux exemples

est-ce que ça eut-être à cause du temps dépassé?
(je pense que c'est ça car d'après codeblocks, avec une entrée prédéfinie longueur

j'ai modifié mon algo et il arrive à passer les 2 premiers tests mais au troisième il renvoi une mauvaise réponse, mais pas moyen de savoir ce qui est en entrée pour pouvoir le tester en local :(
j'ai encore modifié, je ne passe pas le test 5: "limite de temps dépassée"

« j'ai modifié mon algo et il arrive à passer les 2 premiers tests mais au troisième il renvoi une mauvaise réponse, mais pas moyen de savoir ce qui est en entrée pour pouvoir le tester en local :( »

Facile. Ecris l'entrée sur la sortie d'erreur, elle te sera retournée.
En C++ on fait ça avec std::cerr (qu'on utilise comme std::cout).

Sinon, tu te fais tes propres tests.

maintenant mon problème est le temps (même si en passant en mode performance pour la gestion d'alimentation je suis tombé à moins de 80ms sur une chaine de 16384 nucléotides (au lieu de 210ms en mode économie d'énergie))

(je fais du C pas du C++)

Merci pour vos réponses,

Bref mon algo prenait beaucoup trop de mémoire.

J'en ai donc fait un nouveau tout beau tout propre qui marche trés bien en local (rapide et sans utiliser trop de memoire) sauf que sur le serveur de test dès le premier test je me retrouve en erreur fatale !!!

Je voudrais donc vous demandez :
1. Si le programme depasse la limite de temps on a bien un message spécifique et non "Erreur Fatale" ?
2. IDEM avec la memoire
3. Si l'Erreur Fatale est bien du à un plantage du programme comment expliquez vous que ça marche en local et pas sur le serveur ?

Matthieu

@mattgu74 :

1. Si ton programme dépasse la limite de temps il sera juste noté "Limite de temps depassee"

2. Si tu utilise trop de mémoire il sera noté "Limite de memoire depassee" et "Erreur fatale"

3. Si tu as juste erreur fatale c'est que ton programme plante. Cela peut fonctionner chez toi si tu as un OS/compilateur/version de compilateur plus souple que nous.
Fait attention à bien initialiser toutes tes variables avant de les utiliser, vérifie que tes index ne dépassent pas la taille de tes tableaux, et que tu n'essaye pas d'accéder à un pointeur nul. Ce sont généralement les erreurs les plus fréquentes.

Si malgré tout cela tu n'arrives vraiment pas trouver ton erreur, tu peux essayer de nous contacter par mail afin qu'on y jette un œil à l'adresse : entraineur (at) ml point prologin point org

Bon courage !

--
L'équipe Prologin

Merci en me forçant à utiliser les mêmes paramétres que votre compilateur j'arrive à avoir à peu prés la même erreur.
Reste plus qu'à trouver d'où elle vient !

Petite question juste comme ça, est ce que quelqu'un sait ce que sont ces avertissements à la compilation ?

1
2
3
4
5
matthieu@matthieu-desktop:~/prologin$ gcc -W -Wall -O2 -std=c99 -lm -o exo3 qcm2010-3.c
qcm2010-3.c: In function main’:
qcm2010-3.c:60: warning: ignoring return value of scanf, declared with attribute warn_unused_result
qcm2010-3.c:61: warning: ignoring return value of scanf, declared with attribute warn_unused_result
qcm2010-3.c:67: warning: ignoring return value of fgets, declared with attribute warn_unused_result

quelqu'un pourrait expliquer comment écrire l'entrée sur la sortie d'erreur en C++, pour quand notre programme renvoie la mauvais valeur ? j'ai essayé plusieurs trucs dont try{ cout

@jojomolo (et autres) : Arrêtez d'écrire l'entrée sur la sortie d'erreur, c'est dégueu... Faites-vous des tests vous-mêmes, des générateurs de gros tests, etc.

@mattgu74: c'est assez clair : tu ne vérifies pas les valeurs de retour de scanf et fgets alors qu'elles sont déclarées de manière à ce que le compilateur fasse un warning quand tu ne l'utilises pas. En pratique, tu t'en fous un peu, l'entrée est correcte, donc scanf et fgets ne planteront pas... D'ailleurs on ne voit pas ces warnings avec la librairie C du serveur. Laquelle utilises-tu ? Ca me semble un peu facho de déclarer scanf quand même... jamais vu personne tester la valeur de retour de scanf....

J'ai exactement la même erreur en utilisant ces options du compilateur avec le deuxième exo. Surtout que les lignes où se trouve l'erreur sont dans la partie qui a été donné par le site.

Alors je ne saisis pas (du tout) le problème avec ce serveur de tests =/

J'ai codé en Pascal un algo qui me semblait OK, il rentre dans les limites de mémoire, je l'ai testé sur des grosses chaînes et il est rapide, je le soumets, et là, il passe les deux premiers tests et il me renvoie pour le troisième :

Runtime error 200 at \$080483D7
\$080483D7
\$08048805
\$0805F4C1

Tous les tests que j'ai fait chez moi ont été concluants, même avec des très grosses chaînes. Quelqu'un aurait-il une explication ?

EDIT : Je me suis renseigné sur l'erreur "runtime error 200". Ça peut correspondre à deux choses : Soit une division par zéro, soit un bug du compilateur. La première possibilité est écartée : J'ai modifié mon programme de telle sorte qu'il renvoie un message d'erreur en cas de division par zéro, et ce message d'erreur n'apparaît pas. Reste donc l'erreur du compilateur : http://en.wikipedia.org/wiki/Runtime_error_200 . Je reste perplexe : le compilateur que vous utilisez est Free Pascal, et ne semble donc pas affecté par l'erreur... Quant à moi, j'utilise GPC et ça marche très bien sur des chaînes même très grosses.

Oui ben j'suis en maths sup', je vais manger du Pascal pendant deux ans, alors tant qu'à faire, autant s'y mettre tout de suite... =/

@DeeTay si tu as des erreurs au niveau de ta gestion mémoire, il se peut très bien que tu écrives des zéros par inadvertance dans l'emplacement mémoire de ton diviseur... Par ailleurs une "division par zéro" ne vient pas forcément directement de ton code, elle peut venir de la librairie standard si tu lui passes des paramètres pourris !

p6cofren : Moi aussi je le pensais =/

thomasdeniau : J'ai un programme qui n'utilise pas de pointeurs et qui vérifie à chaque division si le diviseur n'est pas égal à 0, et la librairie standard se résume à writeln(), readln(), je vois pas tellement comment j'aurais pu faire une erreur... =/

DeeTay a eu sa réponse par courriel, si ça intéresse quelqu'un : il avait bien des divisions par zéro suite à un dépassement de capacité sur des "integer" qui sont probablement en 16 bits sur le freepascal du serveur (en tout cas c'est comme ça chez moi...)

Je sais que je suis chiant mais bon j'ai repris mon algo a zero j'ai fait un truc qui cartonne (en tout cas je vois plus comment faire mieux) et j'arrive jusqu'au test 9 maintenant et la il me dit "erreur fatale" tout seul, mais est-ce possible qu'aprés les 7premiers il trouve une ridicule erreur dans le code, pour moi sa peut etre que le temps ou la memoire MAIS pourquoi me le dit-il pas ????

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.