Accueil > Forum > > > > Jeu puissance 4 coder en C qui plante des le lancement o_O help^^
Jeu puissance 4 coder en C qui plante des le lancement o_O help^^
mercredi 30 décembre 2009 à 21:20:30 |
Jeu puissance 4 coder en C qui plante des le lancement o_O help^^

ElendilAranwe
|
Bonjour comme dis dans le titre, j'ai crée le puissance 4 et coder celui-ci en C++ et il plante dès le démarrage ce qui est très frustrant vous pouvez l'imaginer^^, des heures passer a le coder et as la fin un superbe résultat:
Thread stopped
C:\Users\RaNdoM_PoWneD\Desktop\puissance4 non fonctionnel\progi.exe:
Fault: access violation at 0x14442e:
read of addess 0xeefface
Si vous pourriez m'aider je vous en serait très reconnaissant^^' j'ai chercher pas mal de temps d'ou viens le problème mais sans resultats :'(.
Je suis débutant, je programme depuis le debut de l'année scolaire BTS IRIS 1ere année.
merci
PS: si vous voyez des normes pas respecter ou quoi se serait sympa de me les notifier, c'est grace aux remarques constructives qu'on avance!!
enfin je crois :D
Code C/C++ : /*******************************************************************************
********************************************************************************
*************************** PUISSANCE 4 ****************************************
********************************************************************************
*******************************************************************************/
/* Consignes pré-processeurs */
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
/* Prototype des fonctions */
void initialisertabJeu( char tabJeu[8][8] );
void demandeJetonetverif( int* jetonJoueur , char tabJeu[8][8] );
int verificationPlacement( int jetonJoueur , char tabJeu[8][8] );
void placerJetonJoueur( int jetonJoueur , char tabJeu[8][8] );
int verificationVictoire( char tabJeu[8][8] );
void affichertabJeu( char tabJeu[8][8] );
void creationJetonetverif( int* jetonIA , char tabJeu[8][8] );
void placerJetonIA( int jetonIA , char tabJeu[8][8] );
/************************** programme principal *******************************/
void main( )
{
char tabJeu[8][8];
int jetonJoueur = 0;
int jetonIA = 0;
int verif = 0;
int victoire = 0;
initialisertabJeu( tabJeu );
printf( "initialisertabJeu OK " );
system("pause");
affichertabJeu( tabJeu );
printf( "affichertabJeu OK " );
system("pause");
/*************** Joueur ***************/
while( victoire != 1 )
{
demandeJetonetverif( &jetonJoueur , tabJeu );
placerJetonJoueur( jetonJoueur , tabJeu );
affichertabJeu( tabJeu );
verif = verificationVictoire( tabJeu );
if( verif == 0 )
{
printf( " VICTOIRE DE L'IA \r\n\r\n " );
victoire = 1;
}
else
if( verif == 1 )
{
printf( " VICTOIRE /clap /clap ^^ \r\n\r\n" );
victoire = 1;
}
/******************** IA **************************/
if( victoire != 1 )
{
creationJetonetverif( &jetonIA , tabJeu );
placerJetonIA( jetonIA , tabJeu );
verif = verificationVictoire( tabJeu );
if( verif == 0 )
{
printf( " VICTOIRE DE L'IA \r\n\r\n " );
victoire = 1;
}
else
if( verif == 1 )
{
printf( " VICTOIRE /clap /clap ^^ \r\n\r\n" );
victoire = 1;
}
}
}
}
/*************************** FIN MAIN *****************************************/
// initialise la table de jeu avec le caractère '.'
void initialisertabJeu( char tabJeu[8][8] )
{
int indice;
int indice2;
for( indice = 0 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice++ )
{
tabJeu[ indice ][ indice2 ] = '.';
}
}
}
// affiche la table de jeu sur la fenêtre console
void affichertabJeu( char tabJeu[8][8] )
{
int indice;
int indice2;
printf("01234567\r\n");
for( indice = 0 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice++ )
{
printf( "%c", tabJeu[ indice2 ][ indice ] );
}
printf("\r\n");
}
}
// demande ou le joueur vut mettre son jeton et vérifie si cela est posible
void demandeJetonetverif( int* jetonJoueur , char tabJeu[8][8] )
{
int verif = NULL ;
printf( "veuillez indiquer une ligne entre 0 et 7 pour y faire glisser un jeton : ");
scanf( "%d" , jetonJoueur );
printf( "\r\n\r\n");
verif = verificationPlacement( *jetonJoueur , tabJeu );
while( verif == -1 )
{
verif = 0;
printf( "erreur veuillez entrer un autre numéro de ligne ou signaler un bug: ");
scanf( "%d" , jetonJoueur );
printf( "\r\n\r\n");
verif = verificationPlacement( *jetonJoueur , tabJeu );
}
}
//verifie si positionner le jeton du joueur est poissible
int verificationPlacement( int jetonJoueur , char tabJeu[8][8] )
{
if( ( tabJeu[ jetonJoueur ][ 0 ] ) != '.' )
{
return -1;
}
if( ( jetonJoueur < 0 ) || ( jetonJoueur > 7 ) )
{
return -1;
}
return 1;
}
// place le jeton du joueur
void placerJetonJoueur( int jetonJoueur , char tabJeu[8][8] )
{
int placement;
int indice;
for( indice = 8 ; indice < 0 ; indice-- )
{
if ( ( tabJeu[ jetonJoueur ][ indice-1 ] ) == '.' )
{
placement = ( indice - 1 ) ;
indice = 1 ;
}
}
tabJeu[ jetonJoueur ][ placement ] = 'O' ;
}
int verificationVictoire( char tabJeu[8][8] )
{
int indice;
int indice2;
int indice3;
int verif;
verif = 0;
// vérifie s'il y a quatres jetons positionner d'affilé en horizontal
for( indice3 = 0 ; indice3 != 5 ; indice3++ )
{
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice2++ )
{
verif = tabJeu[ indice + indice3 ][ indice2 ] + verif;
}
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
// vérifie s'il y a quatres jetons positionner d'affilé en vertical
for( indice3 = 0 ; indice3 != 5 ; indice3++ )
{
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice2++ )
{
verif = tabJeu[ indice2 ][ indice + indice3 ] + verif;
}
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
/* vérifie s'il y a quatres jetons positionner d'affilé en diagonal -
-
-
- */
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 4 ; indice2++ )
{
for( indice3 = 0 ; indice3 != 4 ; indice3++ )
{
verif = tabJeu[ indice + indice3 ][ indice2 + indice3 ] + verif ;
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
}
/* vérifie s'il y a quatres jetons positionner d'affilé en diagonal -
-
-
- */
for( indice = 3 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 4 ; indice2++ )
{
for( indice3 = 0 ; indice3 != 4 ; indice3++ )
{
verif = tabJeu[ indice - indice3 ][ indice2 + indice3 ] + verif ;
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
}
return -1; // pas de victoire
}
// crée le jeton de l'IA et vérifie s'il est possible de le positionner
void creationJetonetverif( int* jetonIA , char tabJeu[8][8] )
{
int verif = NULL ;
printf( "L'IA Réfléchis.... ");
printf( "\r\n\r\n");
*jetonIA = random( 8 );
verif = verificationPlacement( *jetonIA , tabJeu );
while( verif == -1 )
{
verif = 0;
*jetonIA = random( 8 );
verif = verificationPlacement( *jetonIA , tabJeu );
}
}
// place le jeton de l'IA
void placerJetonIA( int jetonIA , char tabJeu[8][8] )
{
int placement;
int indice;
for( indice = 8 ; indice < 0 ; indice-- )
{
if ( ( tabJeu[ jetonIA ][ indice-1 ] ) == '.' ) // si il n'y as pas de jeton à l'emplacement indiqué sauvegarder l'emplacement
{
placement = ( indice - 1 ) ;
indice = 1 ;
}
}
tabJeu[ jetonIA][ placement ] = 'X' ; // met un jeton à l'emplacement sauvegarder précedemment
}
Du C/C++ donnez m'en j'adore en manger^^
|
|
jeudi 31 décembre 2009 à 01:07:36 |
Re : Jeu puissance 4 coder en C qui plante des le lancement o_O help^^

ElendilAranwe
|
Desole le copier coller avait viré les indentations :§
Code C/C++ :
/*******************************************************************************
********************************************************************************
*************************** PUISSANCE 4 ****************************************
********************************************************************************
*******************************************************************************/
/* Consignes pré-processeurs */
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
/* Prototype des fonctions */
void initialisertabJeu( char tabJeu[8][8] );
void demandeJetonetverif( int* jetonJoueur , char tabJeu[8][8] );
int verificationPlacement( int jetonJoueur , char tabJeu[8][8] );
void placerJetonJoueur( int jetonJoueur , char tabJeu[8][8] );
int verificationVictoire( char tabJeu[8][8] );
void affichertabJeu( char tabJeu[8][8] );
void creationJetonetverif( int* jetonIA , char tabJeu[8][8] );
void placerJetonIA( int jetonIA , char tabJeu[8][8] );
/************************** programme principal *******************************/
void main( )
{
char tabJeu[8][8];
int jetonJoueur = 0;
int jetonIA = 0;
int verif = 0;
int victoire = 0;
initialisertabJeu( tabJeu );
printf( "initialisertabJeu OK " );
system("pause");
affichertabJeu( tabJeu );
printf( "affichertabJeu OK " );
system("pause");
/*************** Joueur ***************/
while( victoire != 1 )
{
demandeJetonetverif( &jetonJoueur , tabJeu );
placerJetonJoueur( jetonJoueur , tabJeu );
affichertabJeu( tabJeu );
verif = verificationVictoire( tabJeu );
if( verif == 0 )
{
printf( " VICTOIRE DE L'IA \r\n\r\n " );
victoire = 1;
}
else
if( verif == 1 )
{
printf( " VICTOIRE /clap /clap ^^ \r\n\r\n" );
victoire = 1;
}
/******************** IA **************************/
if( victoire != 1 )
{
creationJetonetverif( &jetonIA , tabJeu );
placerJetonIA( jetonIA , tabJeu );
verif = verificationVictoire( tabJeu );
if( verif == 0 )
{
printf( " VICTOIRE DE L'IA \r\n\r\n " );
victoire = 1;
}
else
if( verif == 1 )
{
printf( " VICTOIRE /clap /clap ^^ \r\n\r\n" );
victoire = 1;
}
}
}
}
/*************************** FIN MAIN *****************************************/
// initialise la table de jeu avec le caractère '.'
void initialisertabJeu( char tabJeu[8][8] )
{
int indice;
int indice2;
for( indice = 0 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice++ )
{
tabJeu[ indice ][ indice2 ] = '.';
}
}
}
// affiche la table de jeu sur la fenêtre console
void affichertabJeu( char tabJeu[8][8] )
{
int indice;
int indice2;
printf("01234567\r\n");
for( indice = 0 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice++ )
{
printf( "%c", tabJeu[ indice2 ][ indice ] );
}
printf("\r\n");
}
}
// demande ou le joueur vut mettre son jeton et vérifie si cela est posible
void demandeJetonetverif( int* jetonJoueur , char tabJeu[8][8] )
{
int verif = NULL ;
printf( "veuillez indiquer une ligne entre 0 et 7 pour y faire glisser un jeton : ");
scanf( "%d" , jetonJoueur );
printf( "\r\n\r\n");
verif = verificationPlacement( *jetonJoueur , tabJeu );
while( verif == -1 )
{
verif = 0;
printf( "erreur veuillez entrer un autre numéro de ligne ou signaler un bug: ");
scanf( "%d" , jetonJoueur );
printf( "\r\n\r\n");
verif = verificationPlacement( *jetonJoueur , tabJeu );
}
}
//verifie si positionner le jeton du joueur est poissible
int verificationPlacement( int jetonJoueur , char tabJeu[8][8] )
{
if( ( tabJeu[ jetonJoueur ][ 0 ] ) != '.' )
{
return -1;
}
if( ( jetonJoueur < 0 ) || ( jetonJoueur > 7 ) )
{
return -1;
}
return 1;
}
// place le jeton du joueur
void placerJetonJoueur( int jetonJoueur , char tabJeu[8][8] )
{
int placement;
int indice;
for( indice = 8 ; indice < 0 ; indice-- )
{
if ( ( tabJeu[ jetonJoueur ][ indice-1 ] ) == '.' )
{
placement = ( indice - 1 ) ;
indice = 1 ;
}
}
tabJeu[ jetonJoueur ][ placement ] = 'O' ;
}
int verificationVictoire( char tabJeu[8][8] )
{
int indice;
int indice2;
int indice3;
int verif;
verif = 0;
// vérifie s'il y a quatres jetons positionner d'affilé en horizontal
for( indice3 = 0 ; indice3 != 5 ; indice3++ )
{
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice2++ )
{
verif = tabJeu[ indice + indice3 ][ indice2 ] + verif;
}
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
// vérifie s'il y a quatres jetons positionner d'affilé en vertical
for( indice3 = 0 ; indice3 != 5 ; indice3++ )
{
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 8 ; indice2++ )
{
verif = tabJeu[ indice2 ][ indice + indice3 ] + verif;
}
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
/* vérifie s'il y a quatres jetons positionner d'affilé en diagonal */
for( indice = 0 ; indice != 4 ; indice++ )
{
for( indice2 = 0 ; indice2 != 4 ; indice2++ )
{
for( indice3 = 0 ; indice3 != 4 ; indice3++ )
{
verif = tabJeu[ indice + indice3 ][ indice2 + indice3 ] + verif ;
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
}
/* vérifie s'il y a quatres jetons positionner d'affilé en diagonal */
for( indice = 3 ; indice != 8 ; indice++ )
{
for( indice2 = 0 ; indice2 != 4 ; indice2++ )
{
for( indice3 = 0 ; indice3 != 4 ; indice3++ )
{
verif = tabJeu[ indice - indice3 ][ indice2 + indice3 ] + verif ;
}
if ( verif == ( 'O' + 'O' + 'O' + 'O' ) )
{
return 1; // victoire du joueur
}
if ( verif == ( 'X' + 'X' + 'X' +'X' ) )
{
return 0; // victoire de l'IA
}
verif = 0;
}
}
return -1; // pas de victoire
}
// crée le jeton de l'IA et vérifie s'il est possible de le positionner
void creationJetonetverif( int* jetonIA , char tabJeu[8][8] )
{
int verif = NULL ;
printf( "L'IA Réfléchis.... ");
printf( "\r\n\r\n");
*jetonIA = random( 8 );
verif = verificationPlacement( *jetonIA , tabJeu );
while( verif == -1 )
{
verif = 0;
*jetonIA = random( 8 );
verif = verificationPlacement( *jetonIA , tabJeu );
}
}
// place le jeton de l'IA
void placerJetonIA( int jetonIA , char tabJeu[8][8] )
{
int placement;
int indice;
for( indice = 8 ; indice < 0 ; indice-- )
{
if ( ( tabJeu[ jetonIA ][ indice-1 ] ) == '.' ))
{
// si il n'y as pas de jeton à l'emplacement indiqué sauvegarder l'emplacement
placement = ( indice - 1 ) ;
indice = 1 ;
}
}
tabJeu[ jetonIA][ placement ] = 'X' ;
// met un jeton à l'emplacement sauvegarder précedemment
}
Du C/C++ donnez m'en j'adore en manger^^
|
|
jeudi 31 décembre 2009 à 09:35:35 |
Re : Jeu puissance 4 coder en C qui plante des le lancement o_O help^^

Lucky92
|
Salut,
A l'initialisation du tableau, tu mélanges les indices, d'où une boucle infinie.
Code C/C++ : for( indice2 = 0 ; indice2 != 8 ; indice++ )
|
|
jeudi 31 décembre 2009 à 11:55:31 |
Re : Jeu puissance 4 coder en C qui plante des le lancement o_O help^^

ElendilAranwe
|
Ah oui c'était sa ! merci beaucoup, après du travail j'ai même rajouter un mode deux joueur^^.
Du C/C++ donnez m'en j'adore en manger^^
|
|
Cette discussion est classée dans : int, indice, verif, indice2, tabjeu
Répondre à ce message
Sujets en rapport avec ce message
Gestion d'entrées/sorties sur fichier [ par macrow ]
Bonjour, Voici mon source : #include #include #include #include #include //********************************************
addition en binaire [ par jejedi ]
bonsoir , je dois faire un petit prog qui additione 2 nombres binaire. Le probleme c' est que mes 2 nombres étant des chaines de caractére ca me renv
[Variable] Affubler un indice à une variable [ par psychospire ]
Bonjour à tous,Alors voila, comme le dit le titre, j'aimerai associer un indice à une variable, c'est-à-dire créer une variable int bob'i' par exemple
il me dit: vector subscript out of range!!! [ par diabohit ]
[color=blue]mon code plante (debug assertion failed) bon c'est ma méthode (generer_tout_ligne): le problème vient du code en rouge:[/color] *********
tableau de structures type pointeur [ par chocho ]
Merci d'avoir répondu à ma demande d'aide.Voici la source sur laquelle je coince:#include#include#define maxlist 10int indicecourant;struct abonne
probleme de sauvegarde de données sous excel par interface c++ [ par nazca ]
Le Zero de la programmationNazcasalutla j'exporte des données venant de visual c++ vers un fichier excel mais j'aimerais savoir comment on fait pour a
pb de sauvegarde de donnees dans un tableau sous excel [ par nazca ]
Le Zero de la programmationNazcaBonjour!j'aimerais savoir comment on fait pour sauvegarder des donnees sous excel dans un tableau.et surtout comment d
taille chaine de char [ par langedechu ]
Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans
Afficher un int dans une MessageBox [ par Oumbre ]
Salut les gens !Je voudrais savoir comment on faisait pour afficher la valeur d'une variable dans une MessageBox.Thx"Quand tu mets une capote au bout
Fonction récursive simple en C ANSI [ par pedu ]
Bonjour à tous,je suis un jeune développeur et j'aimerai avoir un exemplesur l'utilisation d'une fonction récursive simple en Langage Cint facto(int);
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|