diff --git a/procxmos/.env b/procxmos/.env new file mode 100644 index 0000000..039d3d4 --- /dev/null +++ b/procxmos/.env @@ -0,0 +1,4 @@ +USERNAME=iv522s18@freeipa +PASSWORD='513218Az!' +ADDR=91.196.245.217 + diff --git a/procxmos/manip.sh b/procxmos/manip.sh new file mode 100755 index 0000000..2bf1504 --- /dev/null +++ b/procxmos/manip.sh @@ -0,0 +1,178 @@ +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load the .env file that lives beside the script +set -a # automatically export assignments +source "${SCRIPT_DIR}/.env" +set +a + +# ---- login ---- +login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ + "https://${ADDR}:8006/api2/json/access/ticket") +echo "=== LOGIN RESPONSE ===" +echo "$login" +echo "======================" + +# Extract ticket & CSRF +TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) +CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) + +echo "Ticket: $TICKET" +echo "CSRF : $CSRF" +echo "-------------------" + +# ------------------------------------------------- +# Helper: wait for a Proxmox task to finish +# ------------------------------------------------- +wait_task() { + local upid="$1" + local timeout=${2:-40} # seconds (default 2 min) + local interval=2 + local elapsed=0 + + while (( elapsed < timeout )); do + result=$(curl -s -k \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${ADDR}/tasks/${upid}/status") + status=$(echo "$result" | jq -r '.data.status') + exitstatus=$(echo "$result" | jq -r '.data.exitstatus') + + if [[ "$status" == "stopped" ]]; then + if [[ "$exitstatus" == "OK" ]]; then + return 0 + else + echo "Task $upid finished with error: $exitstatus" >&2 + return 1 + fi + fi + + sleep "$interval" + (( elapsed += interval )) + done + + echo "Task $upid timed out after $timeout seconds" >&2 + return 1 +} +# ------------------------------------------------- + +force_stop_vm_ssh() { + local vmid=$1 + local node=$2 # e.g. pve01 + + # SSH to the node (assumes key‑based auth or passwordless login) + ssh root@"${node}" bash </dev/null | awk '{print \$1}') + [[ -n "\$pid" ]] && kill -9 "\$pid" + rm -f "\$lock" + fi + + # Stop the VM + qm stop "${vmid}" + # Wait until it reports stopped + while qm status "${vmid}" | grep -q running; do sleep 1; done +EOF + echo "VM $vmid on node $node is now stopped." +} + +while true; do + echo "Select an option:" + echo "1) get nodes" + echo "2) get vm" + echo "3) create vm" + echo "4) power vm" + echo "5) delete vm" + echo "6) Exit" + printf "Enter choice [1-6]: " + + read choice +case $choice in + 1) +# Show only VM IDs and names +curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | +jq '.data[] | {vmid, name, status, node}' + + ;; + 2) + curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | jq . + ;; + 3) + echo "PrintID:" + read id + echo "PintNAME:" + read name + curl -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + -d "vmid=${id}&name=${name}&memory=2048&net0=virtio,bridge=vmbr0" \ + https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu + ;; + 4) + echo "PrintID:" + read id + curl -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu/${id}/status/start + ;; + 5) + echo "PrintID:"; read id + + # ------------------------------------------------- + # 1️⃣ Find the node that actually hosts the VM + # ------------------------------------------------- + VM_INFO=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") + VM_NODE=$(echo "$VM_INFO" | jq -r --arg id "$id" \ + '.data[] | select(.vmid == ($id|tonumber)) | .node') + if [[ -z "$VM_NODE" ]]; then + echo "Could not locate VM $id" + continue + fi + echo "VM $id is on node $VM_NODE" + + # ------------------------------------------------- + # 2️⃣ Stop the VM via API and wait for the task + # ------------------------------------------------- + stop_resp=$(curl -s -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/status/stop") + stop_upid=$(echo "$stop_resp" | jq -r '.data') + echo "Stop task UPID: $stop_upid" + + if ! wait_task "$stop_upid"; then + echo "Failed to stop VM $id – aborting delete." + continue + fi + echo "VM $id is now stopped." + + # ------------------------------------------------- + # 3️⃣ Destroy the VM via API and wait for the task + # ------------------------------------------------- + destroy_resp=$(curl -s -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/destroy") + destroy_upid=$(echo "$destroy_resp" | jq -r '.data') + echo "Destroy task UPID: $destroy_upid" + + if wait_task "$destroy_upid"; then + echo "VM $id successfully removed." + else + echo "Failed to destroy VM $id." + fi + ;; + 6) + echo "Goodbye!"; exit 0 + ;; + *) + echo "Invalid choice, try again." + ;; + esac +done diff --git a/procxmos/manip.sh~ b/procxmos/manip.sh~ new file mode 100755 index 0000000..fb92c03 --- /dev/null +++ b/procxmos/manip.sh~ @@ -0,0 +1,178 @@ +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load the .env file that lives beside the script +set -a # automatically export assignments +source "${SCRIPT_DIR}/.env" +set +a + +# ---- login ---- +login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ + "https://${ADDR}:8006/api2/json/access/ticket") +echo "=== LOGIN RESPONSE ===" +echo "$login" +echo "======================" + +# Extract ticket & CSRF +TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) +CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) + +echo "Ticket: $TICKET" +echo "CSRF : $CSRF" +echo "-------------------" + +# ------------------------------------------------- +# Helper: wait for a Proxmox task to finish +# ------------------------------------------------- +wait_task() { + local upid="$1" + local timeout=${2:-120} # seconds (default 2 min) + local interval=2 + local elapsed=0 + + while (( elapsed < timeout )); do + result=$(curl -s -k \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${ADDR}/tasks/${upid}/status") + status=$(echo "$result" | jq -r '.data.status') + exitstatus=$(echo "$result" | jq -r '.data.exitstatus') + + if [[ "$status" == "stopped" ]]; then + if [[ "$exitstatus" == "OK" ]]; then + return 0 + else + echo "Task $upid finished with error: $exitstatus" >&2 + return 1 + fi + fi + + sleep "$interval" + (( elapsed += interval )) + done + + echo "Task $upid timed out after $timeout seconds" >&2 + return 1 +} +# ------------------------------------------------- + +force_stop_vm_ssh() { + local vmid=$1 + local node=$2 # e.g. pve01 + + # SSH to the node (assumes key‑based auth or passwordless login) + ssh root@"${node}" bash </dev/null | awk '{print \$1}') + [[ -n "\$pid" ]] && kill -9 "\$pid" + rm -f "\$lock" + fi + + # Stop the VM + qm stop "${vmid}" + # Wait until it reports stopped + while qm status "${vmid}" | grep -q running; do sleep 1; done +EOF + echo "VM $vmid on node $node is now stopped." +} + +while true; do + echo "Select an option:" + echo "1) get nodes" + echo "2) get vm" + echo "3) create vm" + echo "4) power vm" + echo "5) delete vm" + echo "6) Exit" + printf "Enter choice [1-6]: " + + read choice +case $choice in + 1) +# Show only VM IDs and names +curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | +jq '.data[] | {vmid, name, status, node}' + + ;; + 2) + curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | jq . + ;; + 3) + echo "PrintID:" + read id + echo "PintNAME:" + read name + curl -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + -d "vmid=${id}&name=${name}&memory=2048&net0=virtio,bridge=vmbr0" \ + https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu + ;; + 4) + echo "PrintID:" + read id + curl -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu/${id}/status/start + ;; + 5) + echo "PrintID:"; read id + + # ------------------------------------------------- + # 1️⃣ Find the node that actually hosts the VM + # ------------------------------------------------- + VM_INFO=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") + VM_NODE=$(echo "$VM_INFO" | jq -r --arg id "$id" \ + '.data[] | select(.vmid == ($id|tonumber)) | .node') + if [[ -z "$VM_NODE" ]]; then + echo "Could not locate VM $id" + continue + fi + echo "VM $id is on node $VM_NODE" + + # ------------------------------------------------- + # 2️⃣ Stop the VM via API and wait for the task + # ------------------------------------------------- + stop_resp=$(curl -s -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/status/stop") + stop_upid=$(echo "$stop_resp" | jq -r '.data') + echo "Stop task UPID: $stop_upid" + + if ! wait_task "$stop_upid"; then + echo "Failed to stop VM $id – aborting delete." + continue + fi + echo "VM $id is now stopped." + + # ------------------------------------------------- + # 3️⃣ Destroy the VM via API and wait for the task + # ------------------------------------------------- + destroy_resp=$(curl -s -k -X POST \ + -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/destroy") + destroy_upid=$(echo "$destroy_resp" | jq -r '.data') + echo "Destroy task UPID: $destroy_upid" + + if wait_task "$destroy_upid"; then + echo "VM $id successfully removed." + else + echo "Failed to destroy VM $id." + fi + ;; + 6) + echo "Goodbye!"; exit 0 + ;; + *) + echo "Invalid choice, try again." + ;; + esac +done diff --git a/procxmos/test.sh b/procxmos/test.sh new file mode 100755 index 0000000..8097cd6 --- /dev/null +++ b/procxmos/test.sh @@ -0,0 +1,47 @@ +set -euo pipefail +set -x # optional: keep for debugging + +# ------------------------------------------------------------------ +# Determine the directory that contains this script (handles symlinks) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load the .env file that lives beside the script +set -a # automatically export assignments +source "${SCRIPT_DIR}/.env" +set +a +# ------------------------------------------------------------------ + +echo "ADDR = ${ADDR}" +echo "USERNAME = ${USERNAME}" +echo "PASSWORD = ${PASSWORD}" + +# ---- login ---- +login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ + "https://${ADDR}:8006/api2/json/access/ticket") +echo "=== LOGIN RESPONSE ===" +echo "$login" +echo "======================" + +# Extract ticket & CSRF +TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) +CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) + +echo "Ticket: $TICKET" +echo "CSRF : $CSRF" +echo "-------------------" + +if [[ -n "$TICKET" && -n "$CSRF" ]]; then + vmlist=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") + echo "=== VM LIST RAW ===" + echo "$vmlist" + echo "====================" + if command -v jq >/dev/null 2>&1; then + echo "=== VM LIST FORMATTED ===" + echo "$vmlist" | jq . + fi +else + echo "Login failed – no ticket/CSRF token." +fi + diff --git a/procxmos/test.sh~ b/procxmos/test.sh~ new file mode 100755 index 0000000..8097cd6 --- /dev/null +++ b/procxmos/test.sh~ @@ -0,0 +1,47 @@ +set -euo pipefail +set -x # optional: keep for debugging + +# ------------------------------------------------------------------ +# Determine the directory that contains this script (handles symlinks) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Load the .env file that lives beside the script +set -a # automatically export assignments +source "${SCRIPT_DIR}/.env" +set +a +# ------------------------------------------------------------------ + +echo "ADDR = ${ADDR}" +echo "USERNAME = ${USERNAME}" +echo "PASSWORD = ${PASSWORD}" + +# ---- login ---- +login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ + "https://${ADDR}:8006/api2/json/access/ticket") +echo "=== LOGIN RESPONSE ===" +echo "$login" +echo "======================" + +# Extract ticket & CSRF +TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) +CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) + +echo "Ticket: $TICKET" +echo "CSRF : $CSRF" +echo "-------------------" + +if [[ -n "$TICKET" && -n "$CSRF" ]]; then + vmlist=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ + -H "CSRFPreventionToken: ${CSRF}" \ + "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") + echo "=== VM LIST RAW ===" + echo "$vmlist" + echo "====================" + if command -v jq >/dev/null 2>&1; then + echo "=== VM LIST FORMATTED ===" + echo "$vmlist" | jq . + fi +else + echo "Login failed – no ticket/CSRF token." +fi + diff --git a/proglabs/lab10/func.c~ b/proglabs/lab10/func.c~ new file mode 100644 index 0000000..782b168 --- /dev/null +++ b/proglabs/lab10/func.c~ @@ -0,0 +1,558 @@ +#include "head.h" + + +int queryinput(int *x, int *inquery, int *query){ + setlocale(LC_ALL, ""); + + //INPUT------------------------------------------------- + wint_t ch; + *inquery = 0; + while((ch=getwchar())!=L'\n'&&ch!=L'\t'&&ch!=L' '&&*inquery= L'а' && sym <= L'я') || + (sym >= L'А' && sym <= L'Я')) + { + x[0]++; + c++; + continue; + } + if (sym >= L'0' && sym <= L'9') + { + x[1]++; + c++; + continue; + } + if (sym > 32 && sym <= 47) { + x[sym - 28]++; + c++; + continue; + } + if (sym > 58 && sym <= 64) { + x[sym - 38]++; + c++; + continue; + } + x[33]++; + c++; + } + //________________________________________________________ + + + return 0; +} + +void func1 (char **f, int *x,int inquery, int *query){ + switch(funcReturn(f[2])){ + case 1://Определяет среднюю длину слова в тексте + { + if(x[32]){ + x[30]/=x[31]; + printf("\n\tСредняя длинна слова - %d",x[30]); + } + else{ + x[30]+=inquery; + x[31]++; + } + break; + } + + case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. + { + if(x[32]){ + printf("\n\tВсего слов <5 букв - %d",x[30]); + } + else if(inquery<5)x[30]++; + break; + } + + case 3://Определяет количество букв после первого и до последнего слова. + { + if(x[31]); + else {x[30]-=x[0];x[31]=1;} + if(x[32]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);} + break; + } + case 4://Удаляет первую букву каждого слова и выводит результат. + { + if(x[32]); + else + put(x,1,inquery,query); + break; + } + + case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем. + { + if(x[32]) + printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]); + else + if(query[0]==f[3][0])x[30]++; + break; + } + case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12) + { + if(x[32]) + printf("\n\t Найти сумму всех цифр - %d",x[31]); + else + for(int i=0;i=L'0'&&query[i]<=L'9'){ + x[30]=(x[30]*100)+(query[i]-L'0'); + } + } + x[31]+=x[30]; + x[30]=0; + break; + } + + case 7:// вставляет восклицательный знак в конце каждой строки текста. + { + if(x[32]); + else{ + if(query[inquery-1]==L'\n'){ + if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') + query[inquery-2]=L'!'; + else {query[inquery-1]=L'!';query[inquery]=L'\n';} + x[L'!'-28]++;inquery++;} + put(x,0,inquery,query); + } + break; + } + + case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено + { + if(x[32]); + else{ + if(query[inquery-1]==L'\n'){ + if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') + query[inquery-2]=L'.'; + else {query[inquery-1]=L'.';query[inquery]=L'\n';} + x[L'!'-28]++;inquery++;} + put(x,0,inquery,query); + } + break; + } + + case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. + { + if(x[32]) + printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); + else{ + if(last(inquery,query))inquery--; + x[30]+=strquery(f[3],query);} + break; + } + + case 10://подсчитывает количество букв в каждом втором слове. + { + x[34] = x[0] - x[33]; + if(x[32]){ + x[31]=x[33]-x[31]; + printf("\n\t Сумма букв в четных словах - %d",x[31]); + } + else{ + if(x[30]%2==0) + x[31]+=x[34]; + x[33]+=x[33]; + x[30]++; + } + break; + } + } +} + +void func2 (char **f, int *x,int inquery, int *query,int *ch){ + switch(funcReturn(f[2])){ + case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. + { + if(x[32]){ + printf("\n\t Количество букв начинающихся с %c - %d",x[32],x[34]); + } + else if(!(x[31])){x[31]=0;x[33]=query[inquery-1];} + else{if (query[0]==x[33]){x[34]++;}} + break; + } + case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину. + { + if(x[32])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); + else{ + if(last(inquery,query))inquery--; + if(strquery(f[3],query))x[30]++; + } + break; + } + case 3: //Печатает самое длинное слово в тексте. + { + if(x[32]){printf("\n\t");} + else{ + if(x[31]1){ + x[30]=x[2]; + x[31]=x[3]; + x[33]=x[4]; + put(x,0,inquery,query); + break; + } + } + } + break; + } + case 7: //Вычисляет количество слов между первой и последней запятой во введенном тексте + { + if(x[32]){printf("\n\tКолличество слов между первой и последней запятой - %d",x[34]);} + else{ + if(x[L','-28]>0){ + x[31]+=inquery; + if(x[L','-28]>x[33]){ + x[34]+=x[31]; + x[33]=x[31]; + x[31]=0; + } + } + } + break; + } + case 8: //Находит два соседних слова, начинающихся с большой буквы + { + if(x[28]); + else{ + if(*query>=L'А'&&*query<=L'Я'){ + x[35]++; + if(x[35]==2){ + x[30]=x[2]; + x[31]=x[3]; + x[33]=x[4]; + x[35]=0; + printf("\n\t"); + put(x,0,x[34],ch); + printf(" - "); + put(x,0,inquery,query); + printf(" | Находятся друг за другом"); + } + for(int i = 0;iтевирП + { + put(x,inquery-1,0,query); + break; + } + case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол + { + put(x,0,inquery/2,query); + put(x,inquery/2,inquery,query); + break; + } + case 3: //После каждой гласной буквы вставляется буква L'c' и гласная повторяется. Пример: кот ->косот. + { + int alph[20] = {L'а',L'и',L'е',L'ё',L'о',L'у',L'ы',L'э',L'ю',L'я', + L'А',L'И',L'Е',L'Ё',L'О',L'У',L'Ы',L'Э',L'Ю',L'Я'}; + for(int i = 0;i121620, обработать только буквы. + { + x[25]=-1; + for(int i = 0;i= L'а' && query[i] <= L'я'){ + x[25] = (query[i] - L'а') + 1; + if(query[i]>=alphabet[8])x[25]++;} + else if (query[i] == L'ё') + x[25] = 7; + else if (query[i] >= L'А' && query[i] <= L'Я'){ + x[25] = (query[i] - L'А') + 1; + if(query[i]>=alphabet[41])x[25]++;} + else if (query[i] == L'Ё') + x[25] = 7; + if(x[25]!=-1){printf("%d",x[25]);x[25]=-1;} + } + put(x,40,40,query); + break; + } + case 5: //Заменяет буквы верхнего регистра на буквы нижнего и наоборот. Пример: Привет -> пРИВЕТ. + { + for(int i = 0;i32){ + query[i]=alphabet[i-33]; + + } + } + } + put(x,0,inquery,query); + break; + } + /*case 6: //Заменяет буквы на их двоичное представление из таблицы ASCII.Пример: кот ->101010101010111011100010 + { + break; + }*/ + case 7: /*Заменяет букву на заданное смещение в пределах алфавита (шифр + Цезаря), смещение задаётся параметром и может быть положительным или + отрицательным. Пример: кот 3 -> нсх, кот -3 -> злп*/ + { + while(f[3][x[35]]>=L'0'&&f[3][x[35]]<=L'9'){ + x[34] = (x[34]*10)+(f[3][x[35]]-L'0'); + x[35]++; + } + for(int i = 0;i33)x[34]-=33; + if(j+x[34]>=33)x[34]-=33; + query[i]=alphabet[j+x[34]]; + } + + else if(query[i]==alphabet[j]&&j>32){ + while(x[34]>33)x[34]-=33; + if(j+x[34]>=66)x[34]-=33; + query[i]=alphabet[j+33+x[34]]; + } + } + } + put(x,0,inquery,query); + break; + } + case 8: //Делит слово на два и оставляет большую часть. Пример: жук -> к, солнце -> сол + { + if(inquery%2!=0)x[34]=1; + else x[34]=0; + for (int i = 0; i<(inquery/2)+x[34];i++) + x[35] +=query[i]; + for (int i = (inquery/2)+x[34]; ix[36]) + put(x,0,(inquery/2)+x[34],query); + else + put(x,(inquery/2)+x[34],inquery,query); + break; + } + case 9: //Делит слово на два и оставляет меньшую часть. Пример: жук -> жу, солнце -> нце + { + if(inquery%2!=0)x[34]=1; + else x[34]=0; + for (int i = 0; i<(inquery/2)+x[34];i++) + x[35] +=query[i]; + for (int i = (inquery/2)+x[34]; ikot, жук -> zhuk + { + int translit[43]={ + L'a',L'b',L'v',L'g',L'd',L'e' , L'y',/**/L'o' , L'z',/**/L'h' , L'z',L'i',L'y',L'k',L'l',L'm',L'n',L'o', + L'p',L'r',L's',L't',L'u',L'f',L'h',L'c' , L'c',/**/L'h' , L's',/**/L'h' , L's',/**/L'h',/**/L'c',/**/L'h', + L'\'',L'y',L'\'',L'e',L'e' , L'y',/**/L'u' , L'y',/**/L'a'}; + + for(int i =0;i>inquery;i++){ + if( + (query[i] >= alphabet[0] && query[i] <= alphabet[5]) || + (query[i] >= alphabet[8] && query[i] <= alphabet[23]) || + (query[i] >= alphabet[27] && query[i] <= alphabet[30]) || + (query[i] >= alphabet[0+33] && query[i] <= alphabet[5+33]) || + (query[i] >= alphabet[8+33] && query[i] <= alphabet[23+33]) || + (query[i] >= alphabet[27+33] && query[i] <= alphabet[30+33])) + { + query[i]=translit[i]; + } + else if (query[i] != alphabet[26] || query[i] != alphabet[26+33]) + { + for(int z = 0;zinquery) + for(;i>inquery;i--) + printf("%lc",query[i]); + + if(x[30]!=x[2]){putwchar(L'\n');} + if(x[31]!=x[3]){putwchar(L'\t');} + if(x[33]!=x[4]){putwchar(L' ');} + x[30]=x[2]; + x[31]=x[3]; + x[33]=x[4]; +} + + +void printcount(int *x){ + int sum = 0; + printf("\nStatistic"); + printf("\n\t \"Symb\" - [ammount]\n"); + printf("\n\t \"Letters\" - [%d]",x[0]); + printf("\n\t \"Digits\" - [%d]",x[1]); + printf("\n\t \"\\n\" - [%d]",x[2]); + printf("\n\t \"\\t\" - [%d]",x[3]); + printf("\n\t \"space\" - [%d]",x[4]); + + for (int i = 33; i <= 47; i++) { + if (x[i-28] > 10) + printf("\n\t \"%c\" - [%d]", i, x[i-28]); + else + sum+=x[i-28]; + } + + for (int i = 58; i <= 64; i++) { + if(x[i-38]>10) + printf("\n\t \"%c\" = [%d]", i, x[i-32]); + else + sum+=x[i-38]; + } + + printf("\n\t other - [%d]",sum+x[33]); +} + + +int str(char *a, char *b) { + int i = 0; + while(a[i] != L'\0' && b[i] != L'\0') { + if(a[i] != b[i]) return 0; + i++; + } + return a[i] == b[i]; +} + + +int strquery(char *a, int *b){ + + return 0; +} + + +int funcReturn(char *f){ + int swt=0; + if(str(f,"1"))swt=1; + if(str(f,"2"))swt=2; + if(str(f,"3"))swt=3; + if(str(f,"4"))swt=4; + if(str(f,"5"))swt=5; + if(str(f,"6"))swt=6; + if(str(f,"7"))swt=7; + if(str(f,"8"))swt=8; + if(str(f,"9"))swt=9; + if(str(f,"10"))swt=10; + return swt; +} diff --git a/proglabs/lab9/func/.get.c.swp b/proglabs/lab9/func/.get.c.swp deleted file mode 100644 index 0612ead..0000000 Binary files a/proglabs/lab9/func/.get.c.swp and /dev/null differ diff --git a/proglabs/lab9/func/.massive.c.swp b/proglabs/lab9/func/.massive.c.swp deleted file mode 100644 index 7e1664d..0000000 Binary files a/proglabs/lab9/func/.massive.c.swp and /dev/null differ diff --git a/proglabs/lab9/prog b/proglabs/lab9/prog new file mode 100755 index 0000000..d5e6ebd Binary files /dev/null and b/proglabs/lab9/prog differ