begin process at 2012 05 29 16:28:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

Premier prog


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Premier prog

mardi 8 mars 2011 à 18:08:36 | Premier prog

ryder0007



Bonjour,
Voila j'ai terminer de programmer mon premier programme et je voudrais savoir ce que vous en pensez. Il permet de compter le nombre de caracters,le nombre de caracters sans espace ,le nombre de paragraphe et le nombre de mots


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

void analyse(char *contenu,int size,int & ncaracter,int & ncaracter_,int & nparagraphe,int & nmot)//fonction permettant de calculer le nombre de caracter,de caracters sans espaces,le nombre de paragraphe
//et le nombre de mot contenu dans le tableau pointé par contenu
{
int i=0;
int valide=1,valide2=1;
while(i<size)
{
if(contenu[i]=='\0')
{
return;
}

valide=1;
valide2=1;
if(contenu[i]==' ')
{
valide=0;
valide2=1;
if(contenu[i+1]!=' ')
{
nmot++;
}
}
else if(contenu[i]=='\n')
{
valide=0;
valide2=0;
if(contenu[i+1]== '\n')
{
if(contenu[i+2]!='\n' && contenu[i+2]!=' ')
{
nparagraphe++;
}
}
else
{
if(contenu[i+1]!=' ')
{
nmot++;
}
}
}
if(valide)
{
ncaracter_++;
}
if(valide2)
{
ncaracter++;
}
i++;
}
}

int file_size(FILE *file)//fonction permettant de calculer la taille d'un fichier text
{
fseek(file,SEEK_END,SEEK_END);
int size=ftell(file);
fseek(file,0,0);
return size;
}
int main(int argc,char *argv[])
{
char *contenu;
int size;
int ncaracter,ncaracter_,nparagraphe,nmot;
FILE *file=fopen(argv[1],"r");
size=file_size(file);
printf("Analyse du fichier %s...\nTaille :%i octets\n",argv[1],size);
contenu=(char*)malloc(sizeof(char)*size);
fread(contenu,size,1,file);
ncaracter=0;ncaracter_=0,nparagraphe=1,nmot=0;
analyse(contenu,size,ncaracter,ncaracter_,nparagraphe,nmot);
printf("Nombre de caracter: %i\nNombre de caracter sans espace :%i\nNombre de paragraphes: %i\nNombre de mot:%i\n",ncaracter,ncaracter_,nparagraphe,nmot);
return 0;
}
mercredi 9 mars 2011 à 17:22:59 | Re : Premier prog

CptPingu

Administrateur CodeS-SourceS
- Attention: Tu utilises un compilateur C++ pour faire du C ! (Si tu as Dev-C++, jette-le !)
* "malloc" n'a pas besoin d'être casté
* Le '&' dans un argument de fonction n'existe pas. Il est apparu avec le C++.
- Il y a beaucoup de lourdeur de code. Il est possible de se passer des variables valide et valide2.
- Tu oublies parfois de tester l'existence d'un élément dans le tableau. Par exemple: "if(contenu[i+2]!='\n' && contenu[i+2]!=' ')", et si "i + 2 > size" ?
- Tu dois tester que tu as bien tous les arguments quand tu utilises argc et argv
- Tu dois tester la réussite de l'ouverture du fichier.

Je te propose la version suivante (en espérant ne pas avoir fait d'erreur). Elle gère aussi le nombre de ligne.
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

void analyse(const char* contenu, int* ncaracter,int* ncaracter_, int* nparagraphe, int* nmot, int* ligne)
{
  /* Tant qu'il reste des caractères à lire */
  while (contenu && *contenu)
  {
    /* On est sur une lettre, donc on est sur un mot */
    if (*contenu && *contenu != ' ' && *contenu != '\n')
      ++*nmot;
    /* On va jusqu'à la fin du mot courant */
    while (*contenu && *contenu != ' ' && *contenu != '\n')
    {
      ++*ncaracter_;
      ++*ncaracter;
      ++contenu;
    }
    /* On saute les espace et sauts de ligne, jusqu'à atteindre le prochain mot */
    while (*contenu && (*contenu == ' ' || *contenu == '\n'))
    {
      /* 3 espaces à la suite => c'est un paragraphe */
      if (*contenu == '\n' && *(contenu + 1) && *(contenu + 1) == '\n' &&
	  *(contenu + 2) && *(contenu + 2) == '\n')
      {
	++*nparagraphe;
	*ligne += 3;
	*ncaracter += 3;
	contenu += 3;
      }
      else
      {
	if (*contenu == '\n')
	  ++*ligne;
	++*ncaracter;
	++contenu;
      }
    }
  }
}

int file_size(FILE* file)
{
  int size = 0;
  fseek(file,SEEK_END,SEEK_END);
  size = ftell(file);
  fseek(file, 0, 0);
  return size;
}
int main(int argc,char *argv[])
{
  char* contenu = 0;
  int size = 0;
  int ncaracter = 0;
  int ncaracter_ = 0;
  int nparagraphe = 0;
  int nmot = 0;
  int ligne = 0;
  FILE* file;

  if (argc < 2)
  {
    printf("Usage: %s fichier\n", argv[0]);
    return 1;
  }

  file = fopen(argv[1], "r");
  if (!file)
  {
    printf("%s: can't open\n", argv[1]);
    return 2;
  }

  size = file_size(file);
  printf("Analyse du fichier %s...\nTaille :%i octets\n", argv[1], size);
  contenu = malloc(sizeof(char) * size);
  fread(contenu, size, 1, file);
  fclose(file);

  analyse(contenu, &ncaracter, &ncaracter_, &nparagraphe, &nmot, &ligne);

  printf("Nombre de caracter: %i\n"
	 "Nombre de caracter sans espace :%i\n"
	 "Nombre de paragraphes: %i\n"
	 "Nombre de mot: %i\n"
	 "Nombre de ligne: %i\n", ncaracter, ncaracter_, nparagraphe, nmot, ligne);
  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mercredi 9 mars 2011 à 17:24:40 | Re : Premier prog

CptPingu

Administrateur CodeS-SourceS
Petite erreur de commentaire. Remplacez:
Code C/C++ :
/* 3 espaces à la suite => c'est un paragraphe */

Par:
Code C/C++ :
/* 3 sauts de ligne à la suite => c'est un paragraphe */


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : int, file, contenu, size, ncaracter


Répondre à ce message

Sujets en rapport avec ce message

conversion [ par coyotedef ] salut!!lors de la compilation de mon code une erreur apparait. impossible de trouver un remede. "cannot convert parameter 1 from 'char [10]' to 'char' read/write file AMELIORER MON AFFREUX CODE [ par elroulianito ] voila g déposer une source comportant une fonction qui a besoin d'être écrite proprement.(l'appli fonctionne et tous les fichiers du projet sont dispo Mettre un fichier .exe dans un buffer [ par guiguikun ] Je n'arrive pas a mettre un fichier executable en memoire.sur les 100Ko du fichier, mon buffer ne compte que les 3 premiers octets (caracteres)voici m Hachage fermé problème de lecture [ par mcflysupersonic ] Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un Algo trop lent :( [ par MoDDiB ] Bon tout d'abord je tient à préciser qu'il s'agit du concours prologin auquel je compte participer donc si certaines personnes ne veulent pas m'aider Renvoie de type int& [ par saturne_1606 ] Bonjour a tous!Voila g la fonction suivante:int& tableau::operator ()(int l, int c){ if ((l>=tab.size())||(c>=(tab[l]).size())) { Problème copie de fichier.... [ par Clonk ] Bonjour,Je voudrais copier un fichier texte dans mon appli, j'ai fais la fonction suivante://Copie d'un fichier (création du backup)int copier(char * problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou STL : fonction size [ par UbuRoi ] coutwarning C4267: 'argument' : conversion from 'size_t' to 'unsigned int', possible loss of dataPourquoi diable cette fonction ne retourne pas un int


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,153 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales