void convertRoll(int *b, int *c) {
unsigned int temp_roll = 0;
printf("%s: \n", "Please enter the roll number");
scanf("%d", &temp_roll);
*b = temp_roll / 10;
if (temp_roll < 30)
*c = temp_roll % 10;
else
*c = 0;
}
Нужна помощь. Не могу разобратся в коде
#include <stdio.h>
#include "mpi.h"
#include <mysql.h>
#include <string.h>
#define SERVER1 "10.255.2.61"
#define SERVER2 "10.255.2.63"
#define SERVER3 "10.255.2.60"
#define SERVER4 "10.255.2.34"
void convertRoll(int *b, int *c){
printf("Please enter the roll number: ");
int tempRoll;
scanf("%d", &tempRoll);
if (tempRoll<10)
{
*b=0;
*c=tempRoll;
}else if(tempRoll<19 && tempRoll>=10){
*b=1;
*c=tempRoll%10;
}else if(tempRoll <29 && tempRoll >=20){
*b = 2;
*c = tempRoll%10;
}else{
*b=3;
*c=0;
}
}
int main(int argc, char *argv[])
{
int myid,r,j;
int destiny;
float sum=0.0,cgpa=0.0;
MPI_Status status;
int roll[2];
roll[0]=0;
roll[1]=0;
int year[1];
char c;
char returnResult[40];
char returnName[20];
char returnGrade[5];
int i=0;
int one = 1, two = 2, three = 3, four = 4;
int numprocs;
int n = 0;
//mysql connection details
float temp;
char query[100];
char *username="mpiuser";
char *password="iit123";
// char *server = SERVER1;
char server[40];
char *database = "info";
//Mysql variables
MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
int num_fields;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
// while(1){
if (myid == 0)
{
for(r=1;r<6;r++){
//convertRoll(&roll[0], &roll[1]);
sum=0;
for(j=1; j<numprocs; j++)
{
temp = 0;
MPI_Send(roll, sizeof (roll), MPI_INT, j, 11, MPI_COMM_WORLD);
MPI_Recv(returnResult, 40, MPI_CHAR, j, 6, MPI_COMM_WORLD, &status);
temp = returnResult[0]-'0'+(returnResult[2] -'0' )*0.1;
sum = sum + temp;
}
cgpa = sum/4;
printf("CGPA : %.2f\n", cgpa);
returnResult[0]='\0';
}
}
else if (myid == 1)
{
//printf("\n%d\n",myid);
strcpy(server, SERVER1);
MPI_Recv(roll, sizeof (roll), MPI_INT, MPI_ANY_SOURCE, 11, MPI_COMM_WORLD, &status);
if(conn = mysql_init(NULL))
{
}
/* Connect to database */
if (!mysql_real_connect(conn, server, username, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
}
sprintf(query, "Select * from %s ;", "semester", roll[0], roll[1]);
mysql_query(conn, query);
result = mysql_store_result(conn);
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
strcat(returnResult, row[2]);
printf("\n");
}
MPI_Send(returnResult, 40, MPI_CHAR, 0, 6, MPI_COMM_WORLD);
returnResult[0]='\0';
mysql_free_result(result);
mysql_close(conn);
}
else if (myid == 2)
{ // printf("\n%d\n",myid);
strcpy(server, SERVER2);
MPI_Recv(roll, sizeof (roll), MPI_INT, MPI_ANY_SOURCE, 11, MPI_COMM_WORLD, &status);
if(conn = mysql_init(NULL))
{
}
/* Connect to database */
if (!mysql_real_connect(conn, server, username, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
}
sprintf(query, "Select * from %s ;", "semester");
mysql_query(conn, query);
result = mysql_store_result(conn);
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
strcat(returnResult, row[2]);
printf("\n");
}
MPI_Send(returnResult, 40, MPI_CHAR, 0, 6, MPI_COMM_WORLD);
returnResult[0]='\0';
mysql_free_result(result);
mysql_close(conn);
}
else if (myid == 3)
{ //printf("\n%d\n",myid);
strcpy(server, SERVER3);
MPI_Recv(roll, sizeof (roll), MPI_INT, MPI_ANY_SOURCE, 11, MPI_COMM_WORLD, &status);
if(conn = mysql_init(NULL))
{
}
/* Connect to database */
if (!mysql_real_connect(conn, server, username, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
}
sprintf(query, "Select * from %s;", "semester");
//printf("%s", query);
mysql_query(conn, query);
result = mysql_store_result(conn);
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
strcat(returnResult, row[2]);
printf("\n");
}
MPI_Send(returnResult, 40, MPI_CHAR, 0, 6, MPI_COMM_WORLD);
returnResult[0]='\0';
mysql_free_result(result);
mysql_close(conn);
}else if (myid == 4)
{ // printf("\n%d\n",myid);
strcpy(server, SERVER4);
MPI_Recv(roll, sizeof (roll), MPI_INT, MPI_ANY_SOURCE, 11, MPI_COMM_WORLD, &status);
if(conn = mysql_init(NULL))
{
}
/* Connect to database */
if (!mysql_real_connect(conn, server, username, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
}
sprintf(query, "Select * from %s ;", "semester");
mysql_query(conn, query);
result = mysql_store_result(conn);
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
strcat(returnResult, row[2]);
printf("\n");
}
MPI_Send(returnResult, 40, MPI_CHAR, 0, 6, MPI_COMM_WORLD);
returnResult[0]='\0';
mysql_free_result(result);
mysql_close(conn);
}
MPI_Finalize();
return 0;
}
Цитата: Alex_V
Интересует что выполняет функция convertRoll.
Что-то вроде целочисленного деления на 10 с остатком, причем достаточно криво реализованное. Принимает на вход два параметра (b и c). Запрашивает пользователя ввести некоторое число. Если оно лежит в промежутке от 0 до 9, то b = 0, c = (остаток от деления числа на 10). Если оно лежит в промежутке от 10 до 19, то b = 1, c = (остаток от деления числа на 10). Если оно лежит в промежутке от 20 до 29, то b = 2, c = (остаток от деления числа на 10). Если же оно больше либо равно 30, то b = 3, c = 0.
Более-менее нормальная реализация следующая:
Код: