CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Topic de PASCAL

le_duche
le_duche
Niveau 10
13 décembre 2004 à 15:22:53

Ca fait +- 4 mois que je me suis lancé dans le Pascal et ca commence à aller.
Mais j´ai souvent des ptites questions bien précises et je trouve ca lourd de chaque fois créer un nouveau topic. Alors j´ouvre celui-ci: qu´il serve à tous, je commence à savoir répondre aussi à certaines questions.

le_duche
le_duche
Niveau 10
13 décembre 2004 à 15:26:00

J´ai tjs travaillé sur Dev-Pascal mais la je suis bien forcé de passer à Turbo ( pas de bgi dans dev)
Mais certaines fonctions ne sont plus connues par le compilateur:

CursorOn;
CursorOff;

Pascal ne les reconnais pas. Elles ne sont pas dans CRT ou DOS.

Comme le nom l´indique, cette fonction empèche ou active le curseur de texte qui clignote. Mais cela n´empèche pas de le déplacer et d´afficher des trucs.
Est-ce qu´il existe qqch de semblable en Turbo ?

Technix59
Technix59
Niveau 5
13 décembre 2004 à 18:09:51

Salut,

En TP7 tu peux bien entendu le faire car tu as accès à l´assembleur et aux registres du proc.
. Pour l´assembleur, tu balances juste ton code entre ASM et END comme suit:
ASM
mov....
. ..
END;

. Pour les registres du proc, tu déclares une variable de type REGISTERS et tu y accèdes par taVariable.Registre comme suit:
Considérons que ta variable se nomme Reg:
Reg.AX:= 0;
. ....
----
Pour en revenir à ta question, voiçi la réponse ( Inclure l´unité DOS dans ta clause Uses).
Je t´ai mis les 2 méthodes possibles à savoir par l´ASM ou par les interruptions.
----
uses crt, dos;

var reg: Registers;

begin
ClrScr;
{Curseur OFF}
{
asm
mov ah, $0001
mov cx, $1400
int $10
end;
}
Reg.AH:= $0001;
Reg.CX:= $1400;
Intr($10, Reg);

ReadKey;
{Curseur ON}
{
asm
mov ax, $0100
mov cx, $0607
int $10
end;
}
Reg.AX:= $0100;
Reg.CX:= $0607;
Intr($10, Reg);

ReadKey;
end.

Yoda_Software
Yoda_Software
Niveau 30
13 décembre 2004 à 19:33:30

Euh ? je pense que ça aurait été plus clair si tu avait séparé les 2 possibilités.
Moi j´ai compris car j´ai quelques années de Pascal derrière moi et que j´ai déjà utilisé ça, mais pour le_duche, je ne suis pas sûr que ce soit le cas !

Perso, je préfère la version assembleur, car elle est plus rapide !

Je vais essayer de retranscrire ça de façon plus claire sous forme de procédures :

{Version Assembleur}

Uses Crt, Dos;

Procedure CurseurOff;
Asm
mov ah, $0001
mov cx, $1400
int $10
End;

Procedure CurseurOn;
Asm
mov ax, $0100
mov cx, $0607
int $10
End;

Begin
ClrScr;

CurseurOff; {Extinction du curseur}
ReadKey;

CurseurOn; {Affichage du curseur}
ReadKey;

end.

--------------------------------------------

{Version Interruptions gérées par le Pascal}

Uses Crt, Dos;

Procedure CurseurOff;
Begin
Reg.AH:= $0001;
Reg.CX:= $1400;
Intr($10, Reg);
End;

Procedure CurseurOn;
Begin
Reg.AX:= $0100;
Reg.CX:= $0607;
Intr($10, Reg);
End;

Begin
ClrScr;

CurseurOff; {Extinction du curseur}
ReadKey;

CurseurOn; {Affichage du curseur}
ReadKey;

end.

le_duche
le_duche
Niveau 10
14 décembre 2004 à 09:43:53

Merci Yoda de répondre à toutes me questions ( chiantes peut etre)
:-d

Yoda_Software
Yoda_Software
Niveau 30
15 décembre 2004 à 13:25:19

Le code était bon ? Parce que je fait tout ça de mémoire ! :rire:

le_duche
le_duche
Niveau 10
15 décembre 2004 à 16:27:12

j´ai pas encore essaye pcq j´ai pas le net chez moi donc faut que j´ai une disquette avec pour copier cette page...
Vais essayer ce soir.

Je vous ai prepare une petite liste de question :oui:

1. Comment est ce que je peux deplacer un element d´un endroit a un autre ? Je m´explique : je voudrais bien pouvoir deplacer un fichier . exe ou son raccourci pour aller le mettre dans le menu demarer ( lors de la premiere execution du prog par exemple)

2. Est-ce qu´on peut creer un raccourci d´un . exe existant deja dans l´ordi qqpart ?

3. Je voudrais pouvoir declarer une matrice dont les dimensions dependent d´un choix de l´utilisateur. Je sais que je peux declarer une matrice assez grande pour qu´on ne soit jamais limite mais ca bouffe de la memoire...

4. Dans le cadre d´un jeu, j´ai besoin de ralentir l´execution pour que ce soit jouable. Alors j´ai fait:

procedure pause(TempsPause : longint);
var i,j : longint;
begin
for i := 1 to TempsPause do
for j := 1 to 1000000 do
end;

Mais le probleme c´est que si je met le jeu sur un ordi peu puissant ca devient trop facile et si je le met sur un trop puissant c´est injouable.
alors j´ai pense a faire ceci, qu´est ce que vous en pensez ?

function TestCPU : longint;
var iCPU,jCPU,timeCPU : longint;
hCPU,mCPU,sCPU,ssCPU : word;
begin
GetTime(hCPU,mCPU,sCPU,ssCPU);
timeCPU := ssCPU + 100*sCPU + 6000*mCPU + 360000*hCPU;
for iCPU := 1 to 1000000 do
for j := 1 to 1000000 do;
GetTime(hCPU,mCPU,sCPU,ssCPU);
timeCPU := ssCPU + 100*sCPU + 6000*mCPU + 360000*hCPU - timeCPU;
TestCPU := 100000 div timeCPU
end;

et si je fais mnt
Speed := TestCPU;
alors la boucle

for i := 1 to Speed do
for j := 1 to 1000000do;

dure 1 milime de seconde.

le_duche
le_duche
Niveau 10
17 décembre 2004 à 09:28:37

:up: pleaze

dnob700
dnob700
Niveau 10
17 décembre 2004 à 17:39:16

la manière de créer un raccourci m´interesserait, car je ´nai jamais trouver comment faire.

je pensais qu´il devrait y avoir une fonction dans l´API win32 pour faire ça mais non.

donc peut-être que la seule solution est de créer le fichier manuellement ( dans le kb de microsoft on doit bien pouvoir trouver la description du fichier raccourci), mais c´est pas très propre.

Yoda_Software
Yoda_Software
Niveau 30
17 décembre 2004 à 19:48:32

J´avais lu un ruc il y´a très longtemps ( au moins 5 ou 6 ans) pour créer des raccourcis avec Delphi, je vais voir ce que je peux retrouver, mais je ne garantie rien.
As tu demandé dans la section Delphi de developper.com ou codes-sources.com ?

Technix59
Technix59
Niveau 5
17 décembre 2004 à 19:49:00

dnob, créer des raccourcis sous Windows n´est pas bien méchant. Parcontre duche étant sous Turbo Pascal, la meilleure méthode pour lui est de créer un . PIF

Technix59
Technix59
Niveau 5
17 décembre 2004 à 20:02:01

dnob,
voici d´ailleurs la méthode en Delphi.
---
Ajouter ComObj, ShlObj, ActiveX à la clauses Uses puis:

procedure CreeRaccourci(FicSource, FicRaccourci :string);
var
PersistFile : IPersistFile;
ShellLink : IShellLink;
RaccourciWC : array[0..MAX_PATH] of WideChar;
begin
if UpperCase(extractFileExt(FicRaccourci))<>´.LNK´ then
FicRaccourci:=FicRaccourci+´.lnk´;
ShellLink:=CreateComObject(CLSID_ShellLink) as IShellLink;
ShellLink.QueryInterface(IPersistFile, PersistFile);
ShellLink.SetDescription(´´);
ShellLink.SetPath(PChar(FicSource));
ShellLink.SetShowCmd(SW_SHOW);
MultiByteToWideChar(CP_ACP, 0, PChar(FicRaccourci), -1, @RaccourciWC, MAX_PATH);
PersistFile.Save(RaccourciWC, true);
end;

dnob700
dnob700
Niveau 10
17 décembre 2004 à 23:46:37

merci, je vais voir si je peut réussir la même chose en C.

le_duche
le_duche
Niveau 10
20 décembre 2004 à 14:46:36

:up:

Pensez à mes autres questions svp.

dzz1
dzz1
Niveau 6
01 mai 2007 à 20:11:24

Salut,

J´ai un ptit problème à résoudre en pascal qui est le suivant:
A est une matrice carrée mais le nb de lignes et de colonnes est une nombre impair, remplacer par des zéros selon l´exemple:

5 9 1 1 3
8 7 9 4 1
6 2 2 1 1 =>
3 1 7 1 9
2 1 4 2 5

5 9 0 1 3
8 0 0 0 1
0 0 0 0 0
3 0 0 0 9
2 1 0 2 5

J´ai beau essayé mais j´arrive pas à résoudre ce satané blème (en même j´suis pas un foudre de guerre), donc ce serait sympa de votre part m´indiquer ce que j´dois faire :merci:

ps: je n´ai mis que des nombres à un seul chiffre pour que vous cerniez mieux le truc.

Fvirtman
Fvirtman
Niveau 10
02 mai 2007 à 09:44:00

En gros, tu veux faire un "losange" de 0, si j´ose dire, en partant du principe que ta matrice aie un nombre de lignes paires/impaires.

Je te donne un algo formel : a toi de l´adapter :

soit X,Y le nombre de lignes et de colonnes
var mid:integer;
var minx,maxx:integer;
var compteur:integer;
mid:= (Y-1)/2; // milieu
minx:=0;
maxx:=X-1; // les bornes en X, qui rétrécieront
compteur:=0;
while(minx<miny)
{
for i:=minx to maxx
begin
Table[i,mid-compteur]:=0;
Table[i,mid+compteur]:=0;
end;
compteur:=compteur+1;
minx:=minx+1;
maxx:=maxx-1;
if (mid-compteur<0)
break; // sort du while.
}

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment