officialandrey
@officialandrey

Правильно ли перевел с C++ на BASH?

Переписал программу с C++ на BASH, но работает не совсем корректно, помогите найти ошибку пожалуйста.
#include <iostream>
using namespace std;
 
int main() {
	int h1, m1, h2, m2, result = 0;
	cin >> h1 >> m1 >> h2 >> m2;
	while(true) {
		if(m1 == 0) {
			result += h1 > 12 ? h1 - 12 : h1 == 0 ? 12 : h1;
		} else if(m1 == 30) {
			result++;
		}
		if(h1 == h2 && m1 == m2) {
			break;
		}
		m1++;
		if(m1 == 60) {
			m1 = 0;
			h1++;
		}
	}
	cout << result << endl;
	return 0;
}

#!/bin/bash
res=0
read h1 m1 h2 m2
while [ 1 ]
do
	if (($m1==0))
	then
		if (($h1>12))
        then
            res=$(($res+$h1-12))
        else
            if (($h1==0))
            then
            	res=$(($res+12))
            else
            	$res=$(($res+$h1))
            fi
        fi
	else
		if (($m1==30))
		then
			res=$(($res+1))
		fi
	fi
 
	if (($h1==$h2 && $m1==$m2))
	then
		break
	fi
	m1=$(($m1+1))
 
	if (($m1==60))
	then
		m1=0
		h1=$(($h1+1))
	fi
done
echo $res
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
$res=$(($res+$h1))

лишний $ в начале.
Ответ написан
Комментировать
3vi1_0n3
@3vi1_0n3
Можно как-то так, чтобы избежать многочисленных if
#!/bin/bash
res=0
read h1 m1 h2 m2
while :
do
  if [ $m1 -eq 0 ]; then
    if [ $h1 -gt 12 ]; then
        dif=$(($h1-12))
    else
        [ $h1 -eq 0 ] && dif=12 || dif=$h1
    fi
    res=$(($res+$dif))
  else
    [ $m1 -eq 30 ] && ((res++))
  fi
 
  [ $h1 -eq $h2 ] && [ $m1 -eq $m2 ] && break
  ((m1++))
  [ $m1 -eq 60 ] && m1=0 && ((h1++))
done
echo $res

Хотя врать не буду, не понял, какую задачу вы решаете на плюсах. Может даже проще можно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы