ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Написать процедуру, которая осуществляет сложение целых чисел произвольной длины(двухсвязный список)#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <stdio.h> #include <stdlib.h> #include <string.h> struct list { // стр-ра, ссылающаяся сама на себя int info; list *prev; list *next; list() { prev=NULL; next=0; info=0; } };
void insert_post(list **, list **, list**, int); void printList(list *); int countItems(list *); list *first1=0; // голова 1-го списка list *last1=0; // хвост 1-го списка list *first2=0; // голова 2-го списка list *last2=0; // хвост 2-го списка
void main(void) { char digit[10], num1[100], num2[100]; unsigned int i; list *p1, *p2;
printf("Enter first whole number:\n"); scanf("%s", num1); printf("\nEnter second whole number:\n"); scanf("%s", num2);
for(i=0; i<strlen(num1); i++) { p1=last1; sprintf(digit, "%c", num1[i]); insert_post(&p1, &first1, &last1, atoi(digit)); } printList(first1);
for(i=0; i<strlen(num2); i++) { p2=last2; sprintf(digit, "%c", num2[i]); insert_post(&p2, &first2, &last2, atoi(digit)); } printList(first2);
int cnt1 = countItems(first1); int cnt2 = countItems(first2); int rem=0, tmp; p1 = last1; p2 = last2; if(cnt1>=cnt2) { while(p2!=NULL) { tmp = p1->info + p2->info + rem; if(tmp>=10) { tmp -= 10; rem = 1; }
else rem = 0; p1->info = tmp; p1 = p1->prev; p2 = p2->prev; } if(rem) p1->info += 1; printList(first1); } else { while(p1!=NULL) { tmp = p1->info + p2->info + rem; if(tmp>=10) { tmp -= 10; rem = 1; } else rem = 0; p2->info = tmp; p1 = p1->prev; p2 = p2->prev; } if(rem) p2->info += 1; printList(first2); }
} /* Вставка элемента после текущего */ void insert_post(list **q, list **first, list **last, int value) { list *p = new list; if ((*q)!= 0) { p->next = (*q)->next; p->prev = *q; } p->info = value; if ((*q) == 0) { *first = p; *last = p; } else { if ((*q)->next == 0) *last = p; else (*q)->next->prev = p; (*q)->next = p; } } /* count items in the list */ int countItems(list *q) { int cnt=0;
while(q!=NULL) { cnt++; q = q->next; } return cnt; } /* Print the list */ void printList(list *q) { if (q == 0) printf("List is empty.\n\n"); else { printf("The list is:\n"); while (q!= 0) { printf("%d-> ", q->info); q = q->next; } printf("NULL\n\n"); } } ООП 18.4 Перегрузка операции << и >>(вставка и извлечение) для класса “Точка трехмерного пространства” #include <iostream.h> #include <string.h> // Для работы со строковыми функциями. //Определение класса (пользовательского типа): struct string { int length; char line[80]; }; // Прототип операции-функции для перегрузки операции <<: ostream& operator << (ostream& out, string str); void main() { string st; // Объект st класса string. strcpy(st.line,"Содержимое строки."); st.length = strlen(st.line); cout << st; } ostream& // Тип возвращаемого значения. operator << (ostream& out, string str) { out << "\n Длина строки: " << str.length; out << "\n Значение строки: " << str.line; return out; } ============================================= //OOР10_1.СРР - перегрузка операции ввода >>. #include <iostream.h> struct point // Точка трехмерного евклидова пространства. { float x; float y; float z; }; istream& // Тип возвращаемого значения. operator >> (istream& in, point& d) { cout <<"\n Введите три координаты точки: " << "\nx = "; in >> d.x; cout << "y = "; in >> d.y; cout << "z = "; in >> d.z; return in; } void main() { point D; cin >> D; }
Не нашли, что искали? Воспользуйтесь поиском:
|