Frezerləmə proqramı addımdan ibarətdir. Tutaq ki, -ci (1 \le i \le s) addımda j~(1 \le j \le x) sütununda səthin üzərindən m_{ij} qalınlıqda bir təbəqə çıxarılır. Beləliklə, açıq-aşkar görünür ki, sütununda ümumilikdə çıxarılan təbəqə miqdarı belə olacaq:
Frezerləmə sxemini isə tam ədədlərdən ibarət
şəkilində təyin edəcəyik, burada
Eyni frezerləmə sxemi bütün detallara tətbiq olunur. cuts_j~(1 \le j \le x) dəyərləri hesablandıqdan sonra bu sxemi ardıcıllıqla hər detala tətbiq edirik.
Alqoritmin realizasiyası
İşçi massivlər elan edək. Detallar haqqında məlumatı massivində, frezerləmə sxemini isə massivində saxlayacağıq.
int detail[10001][101], cuts[101];Giriş məlumatlarını oxuyuruq.
scanf("%d %d %d %d", &w, &s, &x, &y);detallarla bağlı məlumatları oxuyuruq.
for (i = 0; i < w; i++)
for (j = 0; j < x; j++)
scanf("%d", &detail[i][j]);Frezerləmə proqramının addımlarını oxuyub işləyirik. Hər mövqedə , cuts[j] dəyəri hansısa addımda yerinə yetirilən maksimum dərinliyi göstərəcək.
for (i = 0; i < s; i++)
for (j = 0; j < x; j++)
{
scanf("%d", &val);
if (val > cuts[j]) cuts[j] = val;
}Boşluğun mümkün maksimum hündürlüyü -dir. Frezer başlığı mövqeyində cuts[j] dərinliyinə qədər aşağı düşür. Beləliklə, -ci detala ferezerləndikdən sonra mövqeyində qalan hündürlük belə olacaq:
for (i = 0; i < w; i++)
{
for (j = 0; j < x; j++)
printf("%d ", min(detail[i][j], y - cuts[j]));
printf("\n");
}