traitement des fichiers en c++
Bonjour tout le monde.
Je suis débutante en c++ et j’ai besoin de votre aide dans une partie du mon programme ( qui est inspirer de l’un des programmes qui existe dans le forum). en fait, le principe est de prendre un fichier contenant des caractères / symboles / chiffre (par exemple : le source latex d'un article, avec des symboles et des chiffres). On génère un nombre aléatoire N qui servira à spécifier combien de symboles on lit du fichier (longueur de q) , on exécute ensuite p1,p2, p3 et p4 et on compare les résultats avec l'oracle qui est basé sur P4. On refait cela tant que not eof c'est-à-dire, on prend les N prochains caractères du fichier. Tout ce procédé, on le refait 100 fois, donc 100 fois on génère un nombre aléatoire et on fait le travail sur tout le fichier. Et à la fin les c1,c2,c3,c4 nous donneront combien de fois chaque programme était correct par rapport à P4.
Le programme P1 : traite les lettres majuscules.
Le programme P2 : traite les lettres majuscules ou minuscules.
Le programme P3 : traite les lettres majuscules, minuscules et le chiffre de 0 a 9.
Le programme P2 traite tous les lettres, les chiffres et les symboles.
La partie qui manque dans mon code consiste a importer un fichier et tant que ce n’est pas la fin du ficher (not eof), on prend une chaîne q de longueur N (valeur tirée aléatoirement on appelant le randomgenration) on exécute P1, P2, P3, P4 sur la base de ce q, par la suite on prend la prochaine chaîne q de longueur N et on exécute les 4 programmes et on refaire cela jusqu’à on arrive à la fin du fichier. Si le fichier est fini on le réinitialise et le reparti du nouveau. En cas ou la chaîne qui reste dans le fichier est inférieur à N (valeur aléatoire) on l’ignore. On refaire tout ce procédure 100 fois donc 100 fois on génère un nombre aléatoire et on fait le travail sur tout le fichier. voila mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
| #include <iostream>
#include <iomanip>
#include <array>
#include <vector>
#include <random>
#include <thread>
#include <cstdlib>
#include<ctime>
#include <cstring>
#include <fstream>
using namespace std;
struct state {
int let, dig, other;
char q[];
};
state sinitial;
state sfinal;
bool oracle (state sinitial, state sfinal)
{
sfinal= P4();
return((sinitial.q==sfinal.q)& (sinitial.let=sfinal.let) & (sinitial.dig=sfinal.dig) & (sinitial.other=sfinal.other));
}
//-----------------------------------------------------------------------------
state p1()
{state s;
int i=0;
int let=0;
int dig=0;
int other=0;
char q[10];
int l=strlen(q);
while(i<l){
char c=q[i];
i++;
if(c>='A' && c<='Z')
{
let++;
}
}
s.let=let;
s.dig=0;
s.other=0;
s.q=0;
return(s);
}
state p2()
{state s;
int i=0;
int let=0;
int dig=0;
int other=0;
char q[100];
int l=strlen(q);
while(i<l){
char c=q[i];
i++;
if((c>='A' && c<='Z') ||(c>='a' && c<='z'))
{
let++;
}
}
s.let=let;
s.dig=0;
s.other=0;
s.q=0;
return(s);
}
state p3()
{state s;
int i=0;
int let=0;
int dig=0;
int other=0;
char q[100];
int l=strlen(q);
while(i<l){
char c=q[i];
i++;
if((c>='A' && c<='Z') ||(c>='a' && c<='z'))
{
let++;
}
else if(c>='0' && c<='9')
{
dig++;
}
}
s.let=let;
s.dig=dig;
s.other=0;
s.q=0;
return(s);
}
state p4()
{state s;
int i=0;
int let=0;
int dig=0;
int other=0;
char q[100];
int l=strlen(q);
while(i<l){
char c=q[i];
i++;
if((c>='A' && c<='Z') ||(c>='a' && c<='z'))
{
let++;
}
else if(c>='0' && c<='9')
{
dig++;
}
else
{
other++;
}
}
s.let=let;
s.dig=dig;
s.other=other;
s.q=0;
return(s);
}
//-------------------------------------------------------------------
int randomgeneration(int n)
{
int partSize = 1 + (n == RAND_MAX ? 0 : (RAND_MAX - n) / (n + 1));
int maxUsefull = partSize * n + (partSize - 1);
int draw;
do {
draw = rand();
} while (draw > maxUsefull);
return draw / partSize;
}
//--------------------------------------------------------------------------
void tesdriver(int testdatasize)
{int counters1=0;
int counters2=0;
int counters3=0;
int counters4=0;
for(int testindex=1; testindex <= testdatasize; ++testindex) {
state sinitial, sfinal;
sinitial.n= randomgeneration(10);
/*std::ofstream fichier;
std::fstream fichier;
fichier.open ("test.txt", std::fstream::in | std::fstream::out | std::fstream::app);
fichier.open("fich.txt", );
char c; c=fichier.get();*/
std::string filename = "fich";
std::fstream fichier;
fichier.open(filename);
while(!fichier.eof())
{
sinitial.let=0;
sinitial.dig=0;
sinitial.other=0;
sfinal.let=0;
sfinal.dig=0;
sfinal.other=0;
if(oracle (sinitial,p1())) ++counters1;
sinitial.let=0;
sinitial.dig=0;
sinitial.other=0;
sfinal.let=0;
sfinal.dig=0;
sfinal.other=0;
if(oracle (sinitial,p2())) ++counters2;
sinitial.let=0;
sinitial.dig=0;
sinitial.other=0;
sfinal.let=0;
sfinal.dig=0;
sfinal.other=0;
if(oracle (sinitial,p3())) ++counters3;
sinitial.let=0;
sinitial.dig=0;
sinitial.other=0;
sfinal.let=0;
sfinal.dig=0;
sfinal.other=0;
if(oracle (sinitial,p4())) ++counters2;
}
std::cout << "reliability of p1 : " << (counters1 / static_cast<double>(testdatasize)) << std::endl;
std::cout << "reliability of p2 : " << (counters2/ static_cast<double>(testdatasize)) << std::endl;
std::cout << "reliability of p3 : " << (counters3 / static_cast<double>(testdatasize)) << std::endl;
}
}
int main()
{
tesdriver(100);
} |