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
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ответы на вопрос 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

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

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

Похожие вопросы