Короче, я в шоке.
Препод просит у племяша, чтобы он без применения ООП, на простом Си написал функцию swap(), которая обменивает значения двух переменных одного типа. Но чтобы тип переменных можно было выбирать любой.
Как это можно сделать на обычном Си, не на C++???
C/C++
Лютый препод не унимается. Просит без ООП написать функцию обмена значениями переменных любого типа!
#include<stdio.h>
#define swap(type, a, b) type tmp = a; a = b; b = tmp
int main()
{
float fa = 3.6, fb = 7.4;
swap(float, fa, fb);
printf("\n fa=%.1f, fb=%.1f",fa,fb);
system("pause");//для Винды
return 0;
}

#define swap(type, a, b) type tmp = a; a = b; b = tmp
int main()
{
float fa = 3.6, fb = 7.4;
swap(float, fa, fb);
printf("\n fa=%.1f, fb=%.1f",fa,fb);
system("pause");//для Винды
return 0;
}

В C нет ООП - от слова "совсем". Так что на C без ООП - оксюморон.
Шаблоны - НЕ ООП. Так что на шаблонах C++ без ООП:
template<typename T> void swap(T &a, T &b) {
T t(a);
a = b;
b = t;
}
Вариант на чистом C, похожий на предложенный Аглаей Шниц, но более эффективный, т.к. без использования кучи:
void swap(void *a, void *b, size_t size) {
char t[size];
memcpy(t, a, size);
memcpy(a, b, size);
memcpy(b, t, size);
}
Объём данных ограничен размером стека.
Шаблоны - НЕ ООП. Так что на шаблонах C++ без ООП:
template<typename T> void swap(T &a, T &b) {
T t(a);
a = b;
b = t;
}
Вариант на чистом C, похожий на предложенный Аглаей Шниц, но более эффективный, т.к. без использования кучи:
void swap(void *a, void *b, size_t size) {
char t[size];
memcpy(t, a, size);
memcpy(a, b, size);
memcpy(b, t, size);
}
Объём данных ограничен размером стека.
Дмитрий Хнычев
Ему Си нужен.
наверно, как-то так:
https://rextester.com/WKJ3599
https://rextester.com/WKJ3599
А зачем племяш Ваш полез в такое учебное заведение? Не может - значит не судьба, пусть идёт в ДРУГУЮ ПРОФЕССИЮ.
Абдулла Онорбоев
шарит он нормально, но не всё знает
да и не все всё знают в таком возрасте
да и не все всё знают в таком возрасте
Можно свапнуть побайтно, представив входящие данные как некие массивы
void swap(void* a, void* b, int lenght)
{
char* aa = (char*) a;
char* bb = (char*) b;
char temp;
for (int i = 0; i < lenght; i++)
{
temp = aa[i];
aa[i] = bb[i];
bb[i] = temp;
}
}
В программе функция имеет вид
double f=45.4, d = 11.0;
swap(&f, &d, sizeof(f));
void swap(void* a, void* b, int lenght)
{
char* aa = (char*) a;
char* bb = (char*) b;
char temp;
for (int i = 0; i < lenght; i++)
{
temp = aa[i];
aa[i] = bb[i];
bb[i] = temp;
}
}
В программе функция имеет вид
double f=45.4, d = 11.0;
swap(&f, &d, sizeof(f));
В ШОКЕ не надо быть. Надо быть не ДАУНОМ, как вы и ваш племяш. В полне обычное требование без ООП С, где здесь ШОК? Не шарите, так не лезьте и голову покрасьте в красный цвет.
Похожие вопросы
- Записать значения чисел фиббоначи в переменные и вернутт одновременно три значения переменных.
- Чему равно значение переменной, если ей присвоено значение, возвращенное функцией, которая ничего не возвращает? (+)
- Для заданных с клавиатуры значений переменных x и n вычислить
- Пожалуйста, помогите понять как написать функцию (С)
- Как написать функцию которая вычисляет арктангенс из любого числа на c++ без использования библиотек
- Помогите написать функцию на C++
- Как объявить рандомное положительно и рандомное отрицательно значение переменным float double?
- C++ напишите функцию 2 треугольника похожи или нет
- Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.
- Вопрос по языку си. Написать функцию
Что произойдёт при выполнении swap(a, b, int[10])?