
C/C++
Системное програмирование Помогите, пожалуйста

// C++
#include <iostream>
#include <tuple>
using namespace std;
void ShiftRight3(double& a, double& b, double& c) {
tie(b, c, a) = make_tuple(a, b, c);
}
int main() {
double a, b, c;
cin >> a >> b >> c;
ShiftRight3(a, b, c);
cout << a << ' ' << b << ' ' << c << '\n';
system("pause > nul");
}
// C
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void ShiftRight3(double* a, double* b, double* c) {
double t = *a;
*a = *b;
*b = *c;
*c = t;
}
int main(void) {
double a, b, c;
scanf_s("%lf%lf%lf", &a, &b, &c);
ShiftRight3(&a, &b, &c);
printf("%lf %lf %lf\n", a, b, c);
system("pause > nul");
return 0;
}
#include <iostream>
#include <tuple>
using namespace std;
void ShiftRight3(double& a, double& b, double& c) {
tie(b, c, a) = make_tuple(a, b, c);
}
int main() {
double a, b, c;
cin >> a >> b >> c;
ShiftRight3(a, b, c);
cout << a << ' ' << b << ' ' << c << '\n';
system("pause > nul");
}
// C
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void ShiftRight3(double* a, double* b, double* c) {
double t = *a;
*a = *b;
*b = *c;
*c = t;
}
int main(void) {
double a, b, c;
scanf_s("%lf%lf%lf", &a, &b, &c);
ShiftRight3(&a, &b, &c);
printf("%lf %lf %lf\n", a, b, c);
system("pause > nul");
return 0;
}
void ShiftRight3(double &a, double &b, double &c)
{
double d = c;
c = b;
b = a;
a = d;
}
{
double d = c;
c = b;
b = a;
a = d;
}
[C] Решение немного излишне. Зато гибкое и терпимое к 90% пользовательских типов.
P.S: Проверял на компиляторе MSVC
#include <stdint.h>
#include <math.h>
#include <stdio.h>
typedef enum {
LEFT,
RIGTH
} shift_type;
void swap(void* a, void* b, size_t size) {
if (abs((char*)a - b) >= size) {
long temp;
for (; size % sizeof(long); size--) {
temp = *(char*)a;
*(((char*)a)++) = *(char*)b;
*(((char*)b)++) = temp;
};
for (; size; size -= sizeof(long)) {
temp = *(long*)a;
*(((long*)a)++) = *(long*)b;
*(((long*)b)++) = temp;
};
}
}
void shift(void* A, void* B, void* C, size_t size, shift_type type) {
if (A && B && C && size)
switch (type)
{
case LEFT:
swap(A, B, size);
swap(B, C, size);
break;
case RIGTH:
swap(B, C, size);
swap(A, B, size);
break;
default:
break;
}
}
int main() {
double a = 75.99999, b = 1.54, c = 13.089;
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
shift(&a, &b, &c, sizeof(double), RIGTH);
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
shift(&a, &b, &c, sizeof(double), LEFT);
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
}
P.S: Проверял на компиляторе MSVC
#include <stdint.h>
#include <math.h>
#include <stdio.h>
typedef enum {
LEFT,
RIGTH
} shift_type;
void swap(void* a, void* b, size_t size) {
if (abs((char*)a - b) >= size) {
long temp;
for (; size % sizeof(long); size--) {
temp = *(char*)a;
*(((char*)a)++) = *(char*)b;
*(((char*)b)++) = temp;
};
for (; size; size -= sizeof(long)) {
temp = *(long*)a;
*(((long*)a)++) = *(long*)b;
*(((long*)b)++) = temp;
};
}
}
void shift(void* A, void* B, void* C, size_t size, shift_type type) {
if (A && B && C && size)
switch (type)
{
case LEFT:
swap(A, B, size);
swap(B, C, size);
break;
case RIGTH:
swap(B, C, size);
swap(A, B, size);
break;
default:
break;
}
}
int main() {
double a = 75.99999, b = 1.54, c = 13.089;
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
shift(&a, &b, &c, sizeof(double), RIGTH);
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
shift(&a, &b, &c, sizeof(double), LEFT);
printf("%.3f\t%.3f\t%.3f\n", a, b, c);
}
Похожие вопросы
- Помоги пожалуйста с программой в С++
- Помогите пожалуйста написать программу на Си
- Помогите пожалуйста уже голову сломал, ничего не получается, когда перегружаю шаблонный оператор << ,
- Помогите пожалуйста написать код.(C++)
- Задачки по С++ (помогите пожалуйста кто какие сможет)
- Помогите пожалуйста с программой
- Помогите пожалуйста с C++
- Помогите пожалуйста решить задачу на языке С#.
- Помогите пожалуйста составить задачу на программе С++
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
Это язык С?