SVP SVP je veut la correction de mes faute dans un programme

The King Vip

نجم المنتدى
إنضم
23 أفريل 2009
المشاركات
2.190
مستوى التفاعل
5.629
Problème

Saisir un mot m ( lettre seulement )
rendre m en majuscule
saisir une phrase ph
rendre ph en majuscule
afficher la nombre de répétition du mot dans la phrase

exemple :
mot : bon
phrase : bonjour je veut acheter du bonbon , je veut une bonne quantité

le nombre de répétition est : 4

Mon travail

كود:
program ahmed;
uses wincrt;
var
m,ph:string;
function saisir (m:string):string;
var a:integer;
begin
a:=0;
repeat
a:=a+1;
writeln('saisir une mot');readln(m);
until
upcase(m[a]) in ['A'..'Z'];
end;
procedure majuscule ( var x:string);
var i:integer;
begin
for i:=1 to length(x) do
x[i]:=upcase(x[i]);
end;
function freq(x,y:string):integer;
var
i,l,j,nbr:integer;
d:string;
begin
l:=length(x);
for i:=1 to length(y) do
begin
d:=copy(y,i,l);
for j:=1 to l do
begin
if x[i]=d[i] then
delete(d,i,1);end;
if length(d)=0 then
nbr:=nbr+1;
end;
end;
begin
saisir(m);
majuscule(m);
writeln('saisir une phrase');readln(ph);
majuscule(ph);
writeln('nbr de rep est = ',freq(m,ph));
end.
je veut la corriger des fautes et la solution complète

MERCI
:117:

 

أشـــرف

عضو مميز بالمنتدى التعليمى
عضو قيم
إنضم
26 جويلية 2009
المشاركات
1.679
مستوى التفاعل
6.253
Salem
sincèrement j'ai détecté plusieurs fautes surtout dans la saisie donc je préfère vous donner ma proposition comme correction et je vous laisse détecter vos fautes toi-même

program by_Njaimi;
uses wincrt;
var m,ph:string;

procedure transformation(var mph:string);
var i:integer;
begin
for i:=1 to length(mph) do
mph:=upcase(mph);
end;

procedure saisie_m(var m:string);
begin
repeat
writeln('Saisir un mot');
readln(m);
until (pos(' ',m)=0);
end;

procedure saisie_ph(m:string;var ph:string);
begin
repeat
writeln('Saisir une phrase');
readln(ph);
until (length(ph)>length(m));
end;

procedure traitement(m,ph:string);
var i:integer;
ch:string;
begin
i:=0;
while (pos(m[1],ph)<>0) do
begin
ch:=copy(ph,pos(m[1],ph),length(m));
delete(ph,pos(m[1],ph),1);
if (m=ch) then
begin
i:=i+1;
end;
end;
writeln(i,'fois');
end;

begin
saisie_m(m);
saisie_ph(m,ph);
transformation(m);
transformation(ph);
traitement(m,ph);
end.

Remarque: vous pouvez traiter les caractères accentués a part
Achref

 

HTM89

عضو جديد
إنضم
17 أوت 2008
المشاركات
35
مستوى التفاعل
26
bonjour
voici une possibilité de correction
كود:
program ahmed;
uses wincrt;
var
m,ph:string;

PROCEDURE saisir (var m:string);
var a:integer;
var test:boolean;
begin
repeat
writeln('saisir un mot');
readln(m);
test:=true;
for a:=1 to length(m) do
begin
if(not(upcase(m[a]) in['A'..'Z']))then
test:=false;
end;
until(test=true)
end;

procedure majuscule ( var x:string);
var i:integer;
begin
for i:=1 to length(x) do
x[i]:=upcase(x[i]);
end;

function freq(x,y:string):integer;
var
i,l,nbr:integer;
d:string;
begin
l:=length(x);
for i:=1 to length(y) do
begin
d:=copy(y,i,l);
if (d=x) then
nbr:=nbr+1;
end;
freq:=nbr;
end;
 
begin
saisir(m);
majuscule(m);
writeln('saisir une phrase');readln(ph);
majuscule(ph);
writeln('nbr de rep est = ',freq(m,ph));
end.
les erreurs :
- on n appelle pas une fonction directement mais comme une variable(saisie())
-il nous faut verifier chaque lettre a part(saisie)
-il est plus facile de comparer 2 chaines directement (freq)
:tunis::tunis::tunis::satelite:
 

moezbelgacem

عضو
إنضم
24 نوفمبر 2009
المشاركات
158
مستوى التفاعل
47
أشـــرف;6126692 قال:
Salem
sincèrement j'ai détecté plusieurs fautes surtout dans la saisie donc je préfère vous donner ma proposition comme correction et je vous laisse détecter vos faute toi-même

program by_Njaimi;
uses wincrt;
var m,ph:string;

procedure transformation(var mph:string);
var i:integer;
begin
for i:=1 to length(mph) do
mph:=upcase(mph);
end;

procedure saisie_m(var m:string);
begin
repeat
writeln('Saisir un mot');
readln(m);
until (pos(' ',m)=0);
end;

procedure saisie_ph(m:string;var ph:string);
begin
repeat
writeln('Saisir une phrase');
readln(ph);
until (length(ph)>length(m));
end;

procedure traitement(m,ph:string);
var i:integer;
ch:string;
begin
i:=0;
while (pos(m[1],ph)<>0) do
begin
ch:=copy(ph,pos(m[1],ph),length(m));
delete(ph,pos(m[1],ph),1);
if (m=ch) then
begin
i:=i+1;
end;
end;
writeln(i,'fois');
end;

begin
saisie_m(m);
saisie_ph(m,ph);
transformation(m);
transformation(ph);
traitement(m,ph);
end.

Remarque: vous pouvez traiter les caractères accentués a part
Achref




c'est bien ca marche

:bravo::bravo::bravo::bravo:
:klap::klap::klap::klap:

:good::good::good::good:
:51::51::51::51::51:
:satelite::satelite::satelite::satelite:
 

The King Vip

نجم المنتدى
إنضم
23 أفريل 2009
المشاركات
2.190
مستوى التفاعل
5.629

procedure saisie_m(var m:string);
begin
repeat
writeln('Saisir un mot');
readln(m);
until (pos(' ',m)=0);
end;

procedure saisie_ph(m:string;var ph:string);
begin
repeat
writeln('Saisir une phrase');
readln(ph);
until (length(ph)>length(m));
end;

c pas le but du probléme

fel devoir il nous demander d'ecrire une fonction de saisir de m seulement , la phrase s'ecrit dans la programme principale +++ c'est pas seulement l'espace est interdit , les nbres et les symboles aussi
+++
les variables sont selectionnés par le prof ...
fonction saisie
procedure majusucle
fonction freq
c'est tout
 

أشـــرف

عضو مميز بالمنتدى التعليمى
عضو قيم
إنضم
26 جويلية 2009
المشاركات
1.679
مستوى التفاعل
6.253



c pas le but du probléme

fel devoir il nous demander d'ecrire une fonction de saisir de m seulement , la phrase s'ecrit dans la programme principale +++ c'est pas seulement l'espace est interdit , les nbres et les symboles ...
Moi j'ai répondu à ce que vous avez demandé en haut et je vais quand même pas faire des prédictions sur votre devoir, tu aura dû écrire l'énoncé tel qu'il est
donc ne me dite pas que c'est pas le but du problème
en plus, le but du problème n'est pas la saisie mais le nombre de répétition du mot m
j'espère que c'est clair
J'aime la clarté à fond
Achref

 
أعلى