Обновить cv3/program.c
This commit is contained in:
		
							parent
							
								
									e7564c13c3
								
							
						
					
					
						commit
						6fb8ec1233
					
				
							
								
								
									
										133
									
								
								cv3/program.c
									
									
									
									
									
								
							
							
						
						
									
										133
									
								
								cv3/program.c
									
									
									
									
									
								
							| @ -0,0 +1,133 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| #define MAX_RAZMER 100 | ||||
| 
 | ||||
| /*
 | ||||
|  * Структура, описывающая стек | ||||
|  */ | ||||
| typedef struct { | ||||
|     /*
 | ||||
|      * Массив, хранящий элементы стека | ||||
|      */ | ||||
|     double chisla[MAX_RAZMER]; | ||||
|     /*
 | ||||
|      * Индекс, указывающий на верхушку стека | ||||
|      */ | ||||
|     int vershina; | ||||
| } StEk; | ||||
| 
 | ||||
| /*
 | ||||
|  * Функция, инициализирующая стек | ||||
|  */ | ||||
| void inicStEk(StEk* stek) { | ||||
|     stek->vershina = 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Функция, проверяющая, является ли стек пустым | ||||
|  */ | ||||
| int isEmpty(StEk* stek) { | ||||
|     return stek->vershina == 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Функция, проверяющая, является ли стек полным | ||||
|  */ | ||||
| int isFull(StEk* stek) { | ||||
|     return stek->vershina == MAX_RAZMER; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Функция, добавляющая элемент в стек | ||||
|  */ | ||||
| void push(StEk* stek, double chislo) { | ||||
|     if(isFull(stek)) { | ||||
|         printf("no input\n"); | ||||
|         exit(1); | ||||
|     } | ||||
|     stek->chisla[stek->vershina] = chislo; | ||||
|     stek->vershina++; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|   Функция, извлекающая элемент из стека | ||||
| */ | ||||
| double pop(StEk* stek) { | ||||
|     if(isEmpty(stek)) { | ||||
|         printf("no input\n"); | ||||
|         exit(1); | ||||
|     } | ||||
|     return stek->chisla[--stek->vershina]; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|   | ||||
|     StEk stek; | ||||
|     inicStEk(&stek); | ||||
|     char bufer[256]; | ||||
|     while(fgets(bufer, sizeof(bufer), stdin)) { | ||||
|         char* konec; | ||||
|         double chislo = strtod(bufer, &konec); | ||||
|         if(*konec == '\n') { | ||||
|             push(&stek, chislo); | ||||
|         } else if(strcmp(konec, "+\n") == 0) { | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double b = pop(&stek); | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double a = pop(&stek); | ||||
|             push(&stek, a + b); | ||||
|         } else if(strcmp(konec, "-\n") == 0) { | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double b = pop(&stek); | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double a = pop(&stek); | ||||
|             push(&stek, a - b); | ||||
|         } else if(strcmp(konec, "*\n") == 0) { | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double b = pop(&stek); | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double a = pop(&stek); | ||||
|             push(&stek, a * b); | ||||
|         } else if(strcmp(konec, "/\n") == 0) { | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double b = pop(&stek); | ||||
|             if(isEmpty(&stek)) { | ||||
|                 printf("no input\n"); | ||||
|                 exit(1); | ||||
|             } | ||||
|             double a = pop(&stek); | ||||
|             push(&stek, a / b); | ||||
|         } else { | ||||
|             printf("no input\n"); | ||||
|             exit(1); | ||||
|         } | ||||
|         for(int i = 0; i < stek.vershina; i++) { | ||||
|             printf("%.2lf ", stek.chisla[i]); | ||||
|         } | ||||
|         printf("\n"); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user